iPhone – 手势识别器互相争斗

我在视图中添加了两个手势识别器。 一个将处理视图拖动,另一个将处理双击。 就像是

UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(deleteThisView)]; [doubleTap setDelegate:self]; [doubleTap setCancelsTouchesInView:YES]; [doubleTap setNumberOfTapsRequired:1]; [base addGestureRecognizer:doubleTap]; [doubleTap release]; UIPanGestureRecognizer *panGesture = nil; panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(drag:)]; [panGesture setMaximumNumberOfTouches:1]; [panGesture setDelegate:self]; [base addGestureRecognizer:panGesture]; [panGesture release]; 

问题是:由于视图可以移动,双击很难获得,因为视图可以将一根头发滑向一侧或另一侧,iOS将不会将其识别为双击,而是将其视为两个移动,拖动方法将运行两次。

我没有看到如何做到这一点。 有什么线索吗?

谢谢

有一个委托方法可以告诉中央手势代码两个识别器可能同时进行:

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { if (gestureRecognizer==_panRecognizer && otherGestureRecognizer==_swipeRecognizer) return YES; if (gestureRecognizer==_swipeRecognizer && otherGestureRecognizer==_panRecognizer) return YES; return NO; } 

也许你可以试试这样的东西。

这是Vagrant在swift中的回答:

 func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { if gestureRecognizer == panRecognizer && otherGestureRecognizer == swipeRecognizer { return true } if gestureRecognizer == swipeRecognizer && otherGestureRecognizer == panRecognizer { return true } return false } 

不要忘记实现委托协议并将手势的代表设置为自己(我最初忘记了这一点)。