如何取消长按手势以便Pan手势能够识别。

4
我正在使用 UIGestureRecognizer 创建类似地图的程序。我的工作需要我分别监听长按手势和平移手势,以便它们可以执行自己的任务。但在某些情况下,我需要先监听长按手势以确定选择了哪个对象。然后,当我开始移动手指(而不是抬起手指)时,该对象也会被移动。这有点像在谷歌地图中拖动标记。但由于我的长按识别器已经触发,所以平移手势识别器直到再次点击屏幕才会被触发。我尝试了一些代码,如下:
recognizer.enabled = NO;
recignizer.enabled = YES;

但这并没有什么帮助。

所以我想知道有没有一种方法在长按被识别 (UIGestureRecognizerStateBegan) 后取消它,这样当我开始移动时就可以立即触发平移手势识别器。或者我必须使用UIResponder使其工作?

感谢您的建议。

1个回答

1
您可以使用UILongPressGestureRecognizer来检测长按后的滑动手势。唯一的问题是,由于UILongPressGestureRecognizerUIGestureRecognizer的子类,它没有-translationInView:这个在UIPanGestureRecognizer中非常方便的方法。
您仍然可以通过跟踪长按后触摸移动的位置来进行这些计算,因为它会不断地触发与手势识别器绑定的操作。
请查看this question,它可能有助于使用长按手势计算位移。

谢谢。我不知道我还可以用它来检测平移。在之前设置allowMovement为NO。必须稍微修改代码,以便其他函数接受UILongPress,但现在一切都好了。而且我只需要视图中的位置,而不是它移动了多少,所以这样更容易。但不知道是否有其他方法解决这个问题? - mameo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接