2016-11-06 9 views
0

私はこのようなジェスチャーをした:gestureRecognizerShouldBeginが複数回呼び出されたのはなぜですか?

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]  
initWithTarget:self action:@selector(tapOnPhoto:)]; 
tapGesture.numberOfTapsRequired = 1; 
tapGesture.numberOfTouchesRequired = 1;            
tapGesture.delegate = self; 
[self.htmlWebView addGestureRecognizer:tapGesture]; 

とするとき、いくつかの時間のためのhtmlWebViewコールgestureRecognizerShouldBeginをタップ。

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ 
    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){ 
     [self performSelector:@selector(tapOnPhoto:) withObject:gestureRecognizer]; 

    } 
    return YES; 
} 

gestureRecognizerShouldBeginがジェスチャーごとに複数回呼び出されるのはなぜですか?

+0

これを試してください:tapGesture.delaysTouchesBegan = YES; – kaushal

答えて

0

gestureRecognizerShouldBegin説明。

このメソッドは、ジェスチャ認識プログラムが をUIGestureRecognizerStatePossible状態から移行しようとすると呼び出されます。 NOを返すと、 ジェスチャ認識プログラムは UIGestureRecognizerStateFailed状態に遷移します。

このメソッドは、ジェスチャの遷移状態を取得するために複数回呼び出されます。

また、TapGestureのセレクタを追加したので、なぜそのメソッドを明示的に呼び出すのか、そのメソッドが呼び出されることになります。

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ 
    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){ 
     [self performSelector:@selector(tapOnPhoto:) withObject:gestureRecognizer]; 

    } 
    return YES; 
} 

このメソッドは、メソッドを呼び出すときに削除することができます。

0

@Rajatが答えたところで、デリゲートメソッドを削除し、代わりにtapOnPhoto:メソッドを使用してジェスチャロジックを解析できます。

そのメソッドへの引数は、次の値を持っているかもしれませんstate

と呼ばれる性質を持っているとして、あなたが届きますUIGestureRecognizerオブジェクト:

UIGestureRecognizerStatePossible 
UIGestureRecognizerStateBegan 
UIGestureRecognizerStateChanged 
UIGestureRecognizerStateEnded 
UIGestureRecognizerStateCancelled 
UIGestureRecognizerStateFailed 
UIGestureRecognizerStateRecognized 

あなたはswitchを使用して、特定のロジックを提供することができますそれぞれの場合について。

関連する問題