UIDIewカスタムインタラクション
3440 ワード
ビューレベル
UIViewには、UIresponder、UIView、およびUIcontrolの3つのベースクラスがあります. UIresponder:UIViewの親です.responderはタッチ,ジェスチャー,遠隔制御イベントを処理する.UIApplicationとUIViewControllerもUIresponderのサブクラスです. UIView:描画とタッチ時間を処理します. UIcontrol:target/actionモードがあります.button、Date pickers、テキストボックスはすべてです.
レンダー(Render)
drawRectの使用を避ける:CPU上でレンダリングを行い、GPUレンダリングを使用する場合は既存のビューを使用してカスタムビューを構築します.枠線付きの円形のアイコンを実装する場合
レンダー速度比較OpenGL->Core Image->Core Graphics
カスタムインタラクション
タッチに応答して,より下位層のtouchesBegan,touchesMoved,touchesEndedメソッドを書き換えることができる.target action、エージェント、block、KVO、通知などの他の異なる方法を使用して解決することもできます.
Target action:
最も便利なやり方であり、最も学院派でもある.
プロキシの使用
Blockの使用
KVOの使用
通知の使用
UIViewには、UIresponder、UIView、およびUIcontrolの3つのベースクラスがあります.
レンダー(Render)
drawRectの使用を避ける:CPU上でレンダリングを行い、GPUレンダリングを使用する場合は既存のビューを使用してカスタムビューを構築します.枠線付きの円形のアイコンを実装する場合
- (void)setupView
{
self.clipsToBounds = YES;
self.layer.cornerRadius = self.bounds.size.width / 2;
self.layer.borderWidth = 3;
self.layer.borderColor = [UIColor darkGrayColor].CGColor;
}
レンダー速度比較OpenGL->Core Image->Core Graphics
カスタムインタラクション
タッチに応答して,より下位層のtouchesBegan,touchesMoved,touchesEndedメソッドを書き換えることができる.target action、エージェント、block、KVO、通知などの他の異なる方法を使用して解決することもできます.
Target action:
最も便利なやり方であり、最も学院派でもある.
[self sendActionsForControlEvents:UIControlEventValueChanged];
// view controller
- (void)setupPieChart
{
[self.pieChart addTarget:self
action:@selector(updateSelection:)
forControlEvents:UIControlEventValueChanged];
}
- (void)updateSelection:(id)sender
{
NSLog(@"%@", self.pieChart.selectedSector);
}
プロキシの使用
[self.delegate pieChart:self didSelectSector:self.selectedSector];
// view controller
@interface MyViewController
...
- (void)setupPieChart
{
self.pieChart.delegate = self;
}
- (void)pieChart:(PieChart*)pieChart didSelectSector:(PieChartSector*)sector
{
//
}
Blockの使用
@interface PieChart : UIControl
@property (nonatomic,copy) void(^selectionHandler)(PieChartSection* selectedSection);
@end
// block , block
if (self.selectionHandler != NULL) {
self.selectionHandler(self.selectedSection);
}
// view controller
- (void)setupPieChart
{
self.pieChart.selectionHandler = ^(PieChartSection* section) {
//
}
}
//
__weak id weakSelf = self;
self.pieChart.selectionHandler = ^(PieChartSection* section) {
MyViewController* strongSelf = weakSelf;
[strongSelf handleSectionChange:section];
}
KVOの使用
self.selectedSegment = theNewSelectedSegment;
- (void)setupPieChart
{
[self.pieChart addObserver:self forKeyPath:@"selectedSegment" options:0 context:NULL];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if(object == self.pieChart && [keyPath isEqualToString:@"selectedSegment"]) {
//
}
}
// viewWillDisappear: dealloc 。
通知の使用
//
extern NSString* const SelectedSegmentChangedNotification;
//
NSString* const SelectedSegmentChangedNotification = @"selectedSegmentChangedNotification";
...
- (void)notifyAboutChanges
{
[[NSNotificationCenter defaultCenter] postNotificationName:SelectedSegmentChangedNotification object:self];
}
// , view controller
- (void)setupPieChart
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(segmentChanged:)
name:SelectedSegmentChangedNotification
object:self.pieChart];
}
...
- (void)segmentChanged:(NSNotification*)note
{
}
//