3

以下のコードを使用して、ビューに 2 つのジェスチャ認識エンジンを追加しています。私が欲しいのは、ユーザーが一度タップすると、何かが起こるということです。彼らが 2 回タップすると、別のことが起こります。

このままでは、ユーザーが 1 回タップするか 2 回タップするかにかかわらず、シングル タップ アクションが発生します。つまり、ダブルタップすると、1 つではなく 2 つのアクションが得られます。

区別する

//gesture recognizer.
UITapGestureRecognizer *tapRecognizerShowHideMenu = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doOneThing)];
[tapRecognizerShowHideMenu setDelegate:self];
[tapRecognizerShowHideMenu setNumberOfTapsRequired:1];
[self.view addGestureRecognizer:tapRecognizerShowHideMenu];

UITapGestureRecognizer *tapRecognizerEditEffect = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doAnotherThing)];
[tapRecognizerEditEffect setDelegate:self];
[tapRecognizerEditEffect setNumberOfTapsRequired:2];
[self.view addGestureRecognizer:tapRecognizerEditEffect];
4

4 に答える 4

16

これをコードに追加します。

[tapRecognizerShowHideMenu requireGestureRecognizerToFail:tapRecognizerEditEffect];

ジェスチャ レコグナイザに requireGestureRecognizerToFail: を設定すると、他のジェスチャ レコグナイザがジェスチャを認識しなかった場合にのみジェスチャを認識すべきであると言っています。ここでは、ダブル タップが認識されなかった場合にのみ、シングル タップが認識されるように指定します。

于 2012-12-15T03:50:29.193 に答える
1

これはかなりうまく機能しているようで、上記のコメントでアントンによって与えられたリンクから変更されています。

現時点でoneTap/doubleTapを認識する方法は?

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    if (touch.tapCount == 1) {

        [self performSelector:@selector(showHideMenu) withObject:nil afterDelay:0.15];

    } else if (touch.tapCount == 2) {

        [self performSelector:@selector(editEffect) withObject:nil afterDelay:0];
    }
}
于 2012-12-15T04:46:51.517 に答える
1

次のリンクが役立つと思います。タッチイベントハンドラーをオーバーライドするか、ジェスチャ認識機能を使用して行うことができます。

http://www.cimgf.com/2010/06/14/differentiating-tap-counts-on-ios/

于 2012-12-15T04:28:19.393 に答える
0

ダブルタップジェスチャレコグナイザーの代わりに、ロングタップジェスチャレコグナイザーを使用する方が便利かもしれません。そして、あなたはそのような対立を持たないでしょう

于 2012-12-15T03:50:56.197 に答える