11

onEnter メソッドに次のコードを追加しています。

doubleTapRecognizer_ = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
    doubleTapRecognizer_.numberOfTapsRequired = 2;
    doubleTapRecognizer_.cancelsTouchesInView = NO;
    [[[CCDirector sharedDirector] view] addGestureRecognizer:doubleTapRecognizer_];

このクラスには複数のインスタンスがありますが、セレクターが呼び出されるのは最後に追加されたインスタンスだけです。UIView Class Referenceを見ると、1 つのビューに複数の UIGestureRecognizer を追加できると思われます。プロパティ「gestureRecognizers」は NSArray を返します。

実際、別のクラスの同じビューで動作する UIPanGestureRecognizer が既にあります。したがって、少なくとも 2 つの UIGestureRecognizer を一度に動作させることができます。

4

2 に答える 2

16

複数のジェスチャ レコグナイザーを同じビューに追加できます。(簡単に) できないことは、同じ種類のジェスチャ レコグナイザー (パン、スワイプ、ダブルタップなど) の複数のインスタンスを同じビューに追加することです。

なんで?

最初のジェスチャ レコグナイザーがジェスチャ (この場合はダブル タップ) を認識するとすぐに、すべてのタッチ イベントがキャンセルされるためです。したがって、残りのジェスチャ レコグナイザは認識を終了せず、イベントを発生させることもありません。

同じタイプのジェスチャ レコグナイザは複数必要ありません。あなたの場合、ダブルタップイベントを受け取ったら、それがダブルタップされたことを正しいオブジェクトに知らせるのはあなた次第です。レコグナイザーの位置やその他の属性を使用して、たとえば、ダブルタップされたスプライトを見つけて、必要なことを実行させます。

そのため、ジェスチャをシーン階層の上位ノード (つまり UI レイヤー) で認識できるようにすることをお勧めします。これにより、イベントが適切なノードに渡されるか、単に無視されます。

于 2012-07-08T11:58:11.813 に答える
9

UIGestureRecognizer同じビューに複数を追加delegateするには、ビューに追加したジェスチャ レコグナイザーのプロパティを設定し、デリゲートに次のメソッドを実装する必要があります。

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

上記の方法で、ジェスチャ認識エンジンが同じタイプであるかどうかに関係なく、複数のジェスチャ認識エンジンを同じビューに追加できます。

たとえばUITapGestureRecognizer、同じビューに 2 つ追加すると、2 つのタップ ジェスチャ レコグナイザーのコールバックが呼び出されます。最後に追加されたコールバックが最初に呼び出されます。

お役に立てれば。

于 2017-03-06T08:41:23.400 に答える