2011-07-16 10 views
6

私はスプライトをレンダリングするのにCocos2dを使用しており、スプライトをパン、回転、スケールすることができるようにUIGestureRecognizersを使用しています。私はそれぞれ次のようなコードを使って単独で作業を持っているUIGestureRecognizers(iPhone、Cocos2d)の複数のジェスチャー

:しかし

UIPinchGestureRecognizer *pinchRecognizer = [[[UIPinchGestureRecognizer alloc] initWithTarget:layer action:@selector(handlePinchFrom:)] autorelease]; 
[viewController.view addGestureRecognizer:pinchRecognizer]; 

UIRotationGestureRecognizer *rotationRecognizer = [[[UIRotationGestureRecognizer alloc] initWithTarget:layer action:@selector(handleRotationFrom:)] autorelease]; 
[viewController.view addGestureRecognizer:rotationRecognizer]; 

が、私は両方のスケールにしたいと、ユーザーが回転しながら一緒に自分の指を挟み込む場合スプライトを回転させる(写真アプリではありませんこれは、例えば)。残念ながら、認識器は「回転」モードまたは「ピンチ」モードになっていると思われ、両方のハンドラを同時に呼び出すことはありません:(

これは基本的に私が知りたいことです。 「PinchAndRotateRecognizer」のようなものであることをUIGestureRecognizerをサブクラス化する?私は2つの認識器を組み合わせて、単一のハンドラですべてのアクションを行うことができますか?UIGestureRecognizersを私がしているのでしょう使用することはできません。

ヘルプは感謝:)

答えて

27

デリゲートにgestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:を実装するだけです。

私はUIPinchGestureRecognizerUIPanGestureRecognizerおよびUIRotationGestureRecognizerを設定しており、それらはすべて同時に動作します。私もUITapGestureRecognizerを持っていますではない同時に認識されたいです。私がしたのはこれでした:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    if (![gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] && ![otherGestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) { 
     return YES; 
    } 

    return NO; 
} 
-5

つだけジェスチャ認識装置を同時に「アクティブ」にすることができる。最初に誘発されたものが勝つ。つまり、UIPinchGestureRecognizerとUIRotationGestureRecognizerを組み合わせて、目的の効果を達成することはできません。

あなたが言ったように、UIGestureRecognizerをサブクラス化することができます。ドキュメントのサブクラスの注意を読んでください!

+8

これは本当です。 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizerを実装してください:あなたのデリゲートで、下記の回答を参照してください。 –

関連する問題