2011年11月14日月曜日

UIGestureRecognizerで複数のジェスチャを同時に認識する方法


UIGestureRecognizerを複数登録したとき、デフォルトでは同時に複数のジェスチャを認識してくれません。

一度ジェスチャが終了しないと新しいジェスチャを認識しないので、操作感が微妙だったりします。

そんなときには、UIGestureRecognizerDelegateの
gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
の出番です。

<<こんな感じ>>

UIGestureRecognizer に delegate を設定してあげましょう。
 UIPinchGestureRecognizer *pinchGesture =[[UIPinchGestureRecognizer alloc] initWithTarget:self
                                                                                          action:@selector(handlePinchGesture:)];
 [self addGestureRecognizer:pinchGesture];

 /* ここ! */
 pinchGesture.delegate = self;
 [pinchGesture release];
gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: を実装しましょう。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    /* 無条件に、すべてのジェスチャを同時に認識します。 */
    return YES;
}
これでOK。簡単ですね。