3

我正在使用下面的代码将两个手势识别器添加到视图中。我想要的是:如果用户一旦发生一件事就点击。如果他们点击两次,就会发生另一件事。

事实上,无论用户点击一次还是两次,都会发生单击动作。换句话说,当我双击时,我得到了两个动作,而不是我喜欢的一个

区分

//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

我认为以下链接可能对您有所帮助,您可以通过覆盖触摸事件处理程序或使用手势识别器来实现。

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

于 2012-12-15T04:28:19.393 回答
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 回答
0

也许使用长按手势识别器而不是双击手势识别器会更有用。然后你就不会有这样的冲突

于 2012-12-15T03:50:56.197 回答