如何取消 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
来检测长按后的平移手势。唯一需要注意的是,由于UILongPressGestureRecognizer
是UIGestureRecognizer
的子类,它没有-translationInView:
在UIPanGestureRecognizer
中如此方便。
无论如何,您都可以通过跟踪长按后触摸移动的位置来自行进行这些计算,因为它将继续触发绑定到手势识别器的操作。
看看this question,长按手势可能有助于计算翻译。
【讨论】:
谢谢。我不知道我仍然可以用它来检测平底锅。之前将 allowMovement 设置为 NO。必须稍微修改代码,以便其他功能接受 UILongPress 但现在一切都很好。此外,我只需要查看位置而不是移动了多少,因此更容易。但是想知道是否有其他方法可以解决它?以上是关于如何取消 LongPressGesture 以便 PanGesture 可以识别的主要内容,如果未能解决你的问题,请参考以下文章
释放 LongPressGesture SwiftUI 时触发动作
SwiftUI - 当手指移动一点时让 LongPressGesture 保持不变?
在 UICollectionView 中使用 LongPressGesture 检索 UICollectionViewCell 的 NSIndexPath 和部分