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 
} 
} 

答えて

2

drawRectメソッドを呼び出す方法はありません。これを直接行うのではなく、handleGestureメソッドで[aView setNeedsDisplay]を呼び出すと、ビューのdrawRectが次の描画サイクルで呼び出されます。

+0

リファクタリングを少し行いたければ、カスタムビューで独自のジェスチャ認識機能とhandleGestureの実装を作成できます。そうすれば、ビューの内部でこのロジックをすべて処理でき、使用しているtouchDownフラグは必要ないかもしれません。おそらく、あなたはdrawRectを無効にする必要がなくなるかもしれません: – picciano

+0

ええと...私はそう思っていましたが、それを助けてくれませんでした。この理由は、私のカスタムビューの別のオブジェクトを作成する "ハンドルジェスチャー"の中に私のテーブルを再描画しています。 – Abhinav

+0

ああ、コントローラーからの視点へのジェスチャー認識が増えるほどの理由です。いずれの場合でも、カスタムビューの追加インスタンスを作成しないでください。 – picciano

関連する問題