2011-10-18 13 views
3

私のアプリでは、UIPinchGestureRecognizer、UIRotationGestureRecognizer、UIPanGestureRecognizerを同時にスケーリング、回転、移動するために使用します。同時ジェスチャーの終了を検出するにはどうすればよいですか? (iOS)

メソッドgestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:常にYESを返し、イメージ操作がうまくいくが、どうすればイメージをリセットできるので、すべての同時ジェスチャーの終了を検出できますか?

答えて

7

現在処理されているジェスチャの数をカウントし、すべてが終了したときのような簡単な解決方法はありますか?

.hファイル:

int handledGesturesCount; 

.mファイル:

- (id)init { 
    (...) 
    handledGesturesCount = 0; 
} 

// gesture handlers - the code for -pinch: repeats for -pan: and -rotate: 
- (void)pinch:(UIPinchGestureRecognizer *)recognizer { 
    if (recognizer.state == UIGestureRecognizerStateBegan) { 
     handledGesturesCount += 1; 
    } else if (recognizer.state == UIGestureRecognizerStateEnded || 
       recognizer.state == UIGestureRecognizerStateCancelled || 
       recognizer.state == UIGestureRecognizerStateFailed) 
    { 
     handledGesturesCount -= 1; 
     if (handledGesturesCount == 0) { 
      [self resetImage]; 
     } 
    } 
} 

- (void)pan:(UIPanGestureRecognizer *)recognizer { 
    if (recognizer.state == UIGestureRecognizerStateBegan) { 
     handledGesturesCount += 1; 
    } else if (recognizer.state == UIGestureRecognizerStateEnded || 
       recognizer.state == UIGestureRecognizerStateCancelled || 
       recognizer.state == UIGestureRecognizerStateFailed) 
    { 
     handledGesturesCount -= 1; 
     if (handledGesturesCount == 0) { 
      [self resetImage]; 
     } 
    } 
} 

- (void)rotate:(UIRotationGestureRecognizer *)recognizer { 
    if (recognizer.state == UIGestureRecognizerStateBegan) { 
     handledGesturesCount += 1; 
    } else if (recognizer.state == UIGestureRecognizerStateEnded || 
       recognizer.state == UIGestureRecognizerStateCancelled || 
       recognizer.state == UIGestureRecognizerStateFailed) 
    { 
     handledGesturesCount -= 1; 
     if (handledGesturesCount == 0) { 
      [self resetImage]; 
     } 
    } 
} 
+1

は、それが動作します、ありがとうございました。 –

+0

この方法は、タップレコグナイザを使用すると失敗します。彼らは 'UIGestureRecognizerStateBegan'に入っているときにメッセージを送信したように見え、' handlesGesturesCount'が0より小さくなっています。 –

関連する問題