如何告诉UIGestureRecognizer取消现有触摸?

Jos*_*nch 62 cocoa-touch uigesturerecognizer

我有一个UIPanGestureRecognizer用来跟踪UIImageView用户手指下方的对象().我只关心X轴上的运动,如果触摸偏离Y轴上物体框架的上方或下方,我想结束触摸.

我已经拥有了确定触摸是否在对象的Y边界内所需的一切,但我不知道如何取消触摸事件.翻转识别器的cancelsTouchesInView属性似乎没有做我想要的.

谢谢!

Mat*_*ski 152

这个小技巧对我有用.

@implementation UIGestureRecognizer (Cancel)

- (void)cancel {
    self.enabled = NO;
    self.enabled = YES;
}

@end
Run Code Online (Sandbox Code Playgroud)

UIGestureRecognizer @enabled文档:

禁用手势识别器,使其不接收触摸.默认值为YES.如果在手势识别器当前正在识别手势时将此属性更改为"否",则手势识别器将转换为已取消状态.

  • OP似乎要求取消手势中的单个触摸,而不是完全杀死手势. (4认同)
  • [WWDC 2014 Session 235:Advanced Scrollviews and Touch Handling Techniques](https://developer.apple.com/videos/wwdc/2014/?id=235)推荐使用此技术. (3认同)

Hlu*_*ung 11

@ matej在Swift中的回答.

extension UIGestureRecognizer {
  func cancel() {
    isEnabled = false
    isEnabled = true
  }
}
Run Code Online (Sandbox Code Playgroud)


bud*_*ino 9

OBJ-C:

recognizer.enabled = NO;
recognizer.enabled = YES;
Run Code Online (Sandbox Code Playgroud)

斯威夫特3:

recognizer.isEnabled = false
recognizer.isEnabled = true
Run Code Online (Sandbox Code Playgroud)