繁体   English   中英

UITapGestureRecognizer - 检测双重或三重敲击?

[英]UITapGestureRecognizer - detect double OR triple tap?

我有一个案例,需要通过双击和特定视图的三击来完成两种完全不同的行为。 我将其设置得非常标准,代码如下:

UITapGestureRecognizer *gestureRecognizerDoubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapDetected:)];
[gestureRecognizerDoubleTap setNumberOfTapsRequired:2];
[self.theView addGestureRecognizer:gestureRecognizerDoubleTap];

UITapGestureRecognizer *gestureRecognizerTripleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tripleTapDetected:)];
[gestureRecognizerTripleTap setNumberOfTapsRequired:3];
[self.theView addGestureRecognizer:gestureRecognizerTripleTap];

我遇到的问题是,如果完成三次点击,双击方法也会被触发,因为它会在第三次之前检测到2次点击。 因此,在三次敲击时,两种方法都被调用。

显然,这不是代码或底层SDK的固有问题,因为它是完全预期的。 但是,我很好奇是否有人聪明地以某种方式阻止双击功能被调用如果完成三击? 我假设我可能不得不在延迟计时器上设置双击功能(这将等待一瞬间确认是否完成了三次点击),但我不确定是否有更好的方法,甚至以干净的方式设置这种东西的最好方法是什么?

提前感谢您提供的任何建议!

您可以使用requireGestureRecognizerToFail:此问题:

UITapGestureRecognizer *gestureRecognizerTripleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tripleTapDetected:)];
[gestureRecognizerTripleTap setNumberOfTapsRequired:3];
[self.theView addGestureRecognizer:gestureRecognizerTripleTap];

UITapGestureRecognizer *gestureRecognizerDoubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapDetected:)];
[gestureRecognizerDoubleTap requireGestureRecognizerToFail:gestureRecognizerTripleTap];
[gestureRecognizerDoubleTap setNumberOfTapsRequired:2];
[self.theView addGestureRecognizer:gestureRecognizerDoubleTap];

除非三击一击失败,否则双击不会发射。

像往常一样, 类引用有一些额外的信息,并提到这个场景是使用这种方法的好时机。

如何创建2个识别器,分别为1和2个抽头(通过numberOfTapsRequired配置它们)。 这显然会照顾到1和2个水龙头。 要检测3个分接头,您可以检查1分接收识别器是否在2分接头之后立即被触发。


顺便说一句,虽然我不知道你的应用程序做了什么,同时使用三重和双击手势似乎是潜在的可用性问题。 三次点击本身并不是与应用程序交互的常见方式。 我至少会考虑长按而不是三按。 这将完全避开这一技术挑战:)

暂无
暂无

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

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