过滤单和双击

当用户单击我的视图时,我需要一个特定的方法来运行。 当用户双击时,我需要另外一种方法。

问题是双击会触发单击,它会在我的逻辑中引入错误。 我不能使用UIGestureRecognizer,因为我需要跟踪这些点。

我尝试了一些布尔,但没有机会。 我也试过了cancel / perfomSelector-delay技术,但它不起作用(这很奇怪,因为其他论坛上的其他人说它有效,也许模拟器触摸检测不同?)

我试图让用户设置板块的位置(拖动,旋转),但我需要知道片段交叉点,剪切到板区域等,这就是为什么简单的布尔值不能解决问题。

提前致谢!

检查一下 ,看起来正确的是你要找的:

在代码下方使用UITapGestureRecognizer来处理单击和双击。 该代码被设计为如果我们获得双击事件则不会触发单击事件。 诀窍是使用requireGestureRecognizerToFail来询问单击手势等待双击事件在其触发之前失败。 因此,当用户点击屏幕时,单击手势识别器将不会触发事件直到双击手势识别器。 如果双击手势识别器识别出该事件,则它将触发双标签事件并跳过单击事件,否则将触发单击事件。

UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)]; doubleTapGestureRecognizer.numberOfTapsRequired = 2; //tapGestureRecognizer.delegate = self; [self addGestureRecognizer:doubleTapGestureRecognizer]; // UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; singleTapGestureRecognizer.numberOfTapsRequired = 1; [singleTapGestureRecognizer requireGestureRecognizerToFail: doubleTapGestureRecognizer]; //tapGestureRecognizer.delegate = self; [self addGestureRecognizer:singleTapGestureRecognizer]; 

可能我不明白你的意思是“我需要跟踪点数”,但我没有看到使用手势识别器执行此操作时出现任何问题。

Swift 3解决方案:

 doubleTap = UITapGestureRecognizer(target: self, action:#selector(self.doubleTapAction(_:))) doubleTap.numberOfTapsRequired = 2 singleTap = UITapGestureRecognizer(target: self, action:#selector(self.singleTapAction(_:))) singleTap.numberOfTapsRequired = 1 singleTap.require(toFail: doubleTap) self.view.addGestureRecognizer(doubletap) self.view.addGestureRecognizer(singleTap) 

在代码行singleTap.require(toFail:doubleTap)中,我们强制单击等待并确保点击甚至不是双击。 这意味着我们要求确保双击事件失败,因此它被认为是单击。

Swift解决方案:

  doubleTapSmall1.numberOfTapsRequired = 2 doubleTapSmall1.addTarget(self, action: "doubleTapPic1") smallProfilePic1.addGestureRecognizer(doubleTapSmall1) singleTapSmall1.numberOfTapsRequired = 1 singleTapSmall1.addTarget(self, action: "singleTapPic1") singleTapSmall1.requireGestureRecognizerToFail(doubleTapSmall1) smallProfilePic1.addGestureRecognizer(singleTapSmall1) 

只需通过正确设置委托来实现UIGestureRecognizer委托方法。

  - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ return YES; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ return YES; } 

还要添加这行代码

 [singleTap requireGestureRecognizerToFail:doubleTap];