1
私はカスタムビュークラスを持っています。私のビューコントローラの中で、このビューオブジェクトにTapジェスチャ認識機能を追加します。今、タップジェスチャーのハンドラーで、自分のビュークラスのdrawRectで取得しようとしているビューオブジェクトのプロパティを設定しています。今、私が "handleGesture" & "drawRect"でビューオブジェクトを印刷すると、2つの異なるオブジェクトが表示されます。このため、drawRect内のif条件は実行されません。理由は何でしょうか?カスタムビューでのUITapGestureRecognizerの処理
状態UIGestureRecognizerStateBeganには含まれません。常にUIGestureRecognizerStateEndedの内部に入っています。
// Adding Gesture in my view
MyCustomView *customView= [[[MyCustomView alloc] init] autorelease];
UIGestureRecognizer *GestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
[customView addGestureRecognizer:GestureRecognizer];
[GestureRecognizer release];
// Handling tap on my view
- (void)handleGesture:(UIGestureRecognizer *)GestureRecognizer; {
MyCustomView *aView= (MyCustomView *)GestureRecognizer.view;
switch (iGestureRecognizer.state) {
case UIGestureRecognizerStateBegan:
NSLog(@"Began");
[aView setNeedsDisplay];
aView.touchDown = YES;
break;
case UIGestureRecognizerStateEnded:
NSLog(@"Ended");
aView.touchDown = NO;
[aView setNeedsDisplay];
break;
default:
break;
}
}
// Inside my view class
- (void)drawRect:(CGRect)iRect {
if (self.touchDown) {
// Do something here
}
}
リファクタリングを少し行いたければ、カスタムビューで独自のジェスチャ認識機能とhandleGestureの実装を作成できます。そうすれば、ビューの内部でこのロジックをすべて処理でき、使用しているtouchDownフラグは必要ないかもしれません。おそらく、あなたはdrawRectを無効にする必要がなくなるかもしれません: – picciano
ええと...私はそう思っていましたが、それを助けてくれませんでした。この理由は、私のカスタムビューの別のオブジェクトを作成する "ハンドルジェスチャー"の中に私のテーブルを再描画しています。 – Abhinav
ああ、コントローラーからの視点へのジェスチャー認識が増えるほどの理由です。いずれの場合でも、カスタムビューの追加インスタンスを作成しないでください。 – picciano