如何取消 LongPressGesture 以便 PanGesture 可以识别

Posted

技术标签:

【中文标题】如何取消 LongPressGesture 以便 PanGesture 可以识别【英文标题】:How to cancel LongPressGesture so PanGesture can recognise 【发布时间】:2013-11-25 10:15:34 【问题描述】:

我正在使用UIGestureRecognizer atm 创建一些类似地图的程序。

我的工作要求我分别听长按手势和平移手势,所以他们每个人都可以做自己的任务。 但在一种情况下,我需要先听长按才能知道选择了哪个对象。之后,当我开始移动手指(不抬起手指)时,该对象也会移动。这有点像在谷歌地图中拖动一个标记。但是因为我的长按识别器已经触发了,所以直到我再次在屏幕上按标签时,平移手势识别器才触发。

我尝试了类似的东西

recognizer.enabled = NO;
recignizer.enabled = YES;

但它根本没有帮助。

所以我想知道在识别后是否有取消长按 (UIGestureRecognizerStateBegan),所以当我开始移动时,平移手势识别器将立即启动。或者我必须使用 UIResponder 才能使其工作?

感谢您的建议。

【问题讨论】:

【参考方案1】:

您实际上可以使用UILongPressGestureRecognizer 来检测长按后的平移手势。唯一需要注意的是,由于UILongPressGestureRecognizerUIGestureRecognizer 的子类,它没有-translationInView:UIPanGestureRecognizer 中如此方便。

无论如何,您都可以通过跟踪长按后触摸移动的位置来自行进行这些计算,因为它将继续触发绑定到手势识别器的操作。

看看this question,长按手势可能有助于计算翻译。

【讨论】:

谢谢。我不知道我仍然可以用它来检测平底锅。之前将 allowMovement 设置为 NO。必须稍微修改代码,以便其他功能接受 UILongPress 但现在一切都很好。此外,我只需要查看位置而不是移动了多少,因此更容易。但是想知道是否有其他方法可以解决它?

以上是关于如何取消 LongPressGesture 以便 PanGesture 可以识别的主要内容,如果未能解决你的问题,请参考以下文章

释放 LongPressGesture SwiftUI 时触发动作

取消当前的长手势来拖动视图?

SwiftUI - 当手指移动一点时让 LongPressGesture 保持不变?

在 UICollectionView 中使用 LongPressGesture 检索 UICollectionViewCell 的 NSIndexPath 和部分

LongPressGesture 与自定义代表被调用两次。是因为我的代表吗?

如何暂停和取消暂停属性以便在 knockout.js 中按预期工作