iPhone:如何在地图上结合长按手势和拖动操作?

the*_*atp 5 iphone sdk drag-and-drop mkmapview uigesturerecognizer

我已经尝试了很多东西,在这一点上发布代码可能会令人困惑,所以让我从这个概念开始.

我需要以某种方式将长按和触摸拖动的操作组合到一个操作中,例如LongPressThenDragGestureRecognizer.我试图在MKMapView上完成这个,所以我不能一直禁用用户交互,因为我想要地图的平移和缩放功能.

为了使事情复杂化,需要删除用户长按以识别交互的初始项(MKOverlay对象)并用新绘制的对象替换.此时,代码不再关心对象,仅在手指处于任何给定点的位置(我将在移动时重绘拖动的对象).

这是工作流程:

  1. 用户在地图上显示叠加层
  2. 用户触摸并保留该项目,让应用知道他们想要拖动它
  3. 应用程序用绘制的对象替换叠加层并禁用地图,以便它不会开始平移(而不是拖动).
  4. 用户拖动手指,并在移动时重绘对象.
  5. 用户抬起手指完成拖动
  6. 应用程序用新的地图叠加替换绘制的对象
  7. 应用程序允许用户在地图上进行交互,以允许平移/缩放/注释选择等.

到目前为止,我已经尝试了很多东西,但收效甚微.我到目前为止的最佳结果如下所示.这是使用MKMapView对象上的UILongPressGestureRecognizer(检查与叠加的交集)完成的,然后覆盖touchesBegan以进行地图触摸拖动.

  • 显示叠加并且用户成功执行可以适当识别的长按手势
  • 禁用地图用户交互,并用绘制的对象替换叠加
  • 用户必须抬起手指并再次触摸以启动拖动操作
  • 当用户抬起手指时,将绘制新的叠加层并再次启用地图交互

我非常接近,我只是不知道如何将手势合二为一,这样用户就不必抬起手指再次触摸以开始拖动.

任何想法都非常感谢.

Mic*_*ael 0

如果这是一个像这样的复杂手势,我会很想完全避免使用手势识别器,并转移到 TouchesBegan、touchesMoved、touchesEnded、touchesCancelled 以及你移动的某种状态,因为手势碰巧知道你在哪里。

MKMapView 有一个 UIResponder 基类,因此应该很容易制作您自己的 MKMapView 派生版本,它响应触摸事件(记住将它们传递给超级地图以维持其正常功能)。