我尝试了多种方法,如果现在发布代码可能会让人困惑,因此让我先解释一下这个概念。
我需要将长按和触摸拖动的操作合并为单个操作,类似于LongPressThenDragGestureRecognizer。我正在尝试在MKMapView上完成此操作,因此不能在整个过程中禁用用户交互,因为我需要地图的平移和缩放功能。
稍微复杂一些的是,用户长按的初始项(一个MKOverlay对象)将需要被移除并替换为新的绘制对象。此时,代码只关心手指在任何给定点的位置(当他们移动时,我将重新绘制拖动的对象)。
这是工作流程:
1. 用户在地图上呈现叠加层 2. 用户触摸并长按某个项目以让应用程序知道他们想要拖动它 3. 应用程序使用绘制对象替换叠加层,并禁用地图,以防止开始平移(而不是拖动) 4. 用户拖动手指,对象会随着他们的移动重新绘制 5. 用户抬起手指以完成拖动 6. 应用程序使用新的地图叠加层替换绘制的对象 7. 应用程序启用地图上的用户交互,以允许平移/缩放/注释选择等操作。
迄今为止,我已经尝试了很多方法,但几乎没有什么成功的。目前为止最好的结果是使用UILongPressGestureRecognizer在MKMapView对象上(检查与覆盖层的交叉)进行操作,并替换map touch drag的touchesBegan。
以下是最佳效果:
1. 显示覆盖层,并成功执行长按手势 2. 禁用地图用户交互,并用绘制对象替换覆盖层 3. 用户必须抬起手指并再次触摸才能启动拖动操作 4. 当用户抬起手指时,会绘制新的覆盖层,并再次启用地图交互
我很接近成功了,只是不知道如何将手势合并为一个,以便用户不必抬起手指并再次触摸即可开始拖动。非常感谢任何想法。
我需要将长按和触摸拖动的操作合并为单个操作,类似于LongPressThenDragGestureRecognizer。我正在尝试在MKMapView上完成此操作,因此不能在整个过程中禁用用户交互,因为我需要地图的平移和缩放功能。
稍微复杂一些的是,用户长按的初始项(一个MKOverlay对象)将需要被移除并替换为新的绘制对象。此时,代码只关心手指在任何给定点的位置(当他们移动时,我将重新绘制拖动的对象)。
这是工作流程:
1. 用户在地图上呈现叠加层 2. 用户触摸并长按某个项目以让应用程序知道他们想要拖动它 3. 应用程序使用绘制对象替换叠加层,并禁用地图,以防止开始平移(而不是拖动) 4. 用户拖动手指,对象会随着他们的移动重新绘制 5. 用户抬起手指以完成拖动 6. 应用程序使用新的地图叠加层替换绘制的对象 7. 应用程序启用地图上的用户交互,以允许平移/缩放/注释选择等操作。
迄今为止,我已经尝试了很多方法,但几乎没有什么成功的。目前为止最好的结果是使用UILongPressGestureRecognizer在MKMapView对象上(检查与覆盖层的交叉)进行操作,并替换map touch drag的touchesBegan。
以下是最佳效果:
1. 显示覆盖层,并成功执行长按手势 2. 禁用地图用户交互,并用绘制对象替换覆盖层 3. 用户必须抬起手指并再次触摸才能启动拖动操作 4. 当用户抬起手指时,会绘制新的覆盖层,并再次启用地图交互
我很接近成功了,只是不知道如何将手势合并为一个,以便用户不必抬起手指并再次触摸即可开始拖动。非常感谢任何想法。