繁体   English   中英

UIGesture识别器,区分单击和双击。

[英]UIGesture recognizer, differentiate between single and double tap.

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

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

区分

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

将其添加到您的代码中:

[tapRecognizerShowHideMenu requireGestureRecognizerToFail:tapRecognizerEditEffect];

当您设置requireGestureRecognizerToFail:对于手势识别器,您说它应该只识别手势,如果其他手势识别器没有。 所以在这里,只有在双击时才能识别单击。

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

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

这看起来效果很好,根据安东在上面的评论中给出的链接进行了修改。

如何识别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];
    }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM