在平移时跟踪MKMapView centerCoordinate

时间:2013-12-22 16:38:39

标签: ios mkmapview mapkit mkannotation

我正在我的应用中实现一个地图功能,我允许用户通过平移来设置他们当前的位置。

此时,我希望MKAnnotation中有centerCoordinate。所以我想要做的是跟踪地图的centerCoordinate何时更改并正确更改注释的坐标。行为类似于 Uber Hailo 等行为。

我尝试了基于时间的实现,其中每个 0.00001s centerCoordinate都会被检查,并且注释也会被移动。但是,如果地图没有轻轻地轻弹,那么注释会从一个地方跳到另一个地方,这不会形成良好的用户界面。

我尝试的另一个实现是通过手势识别器和MKMapViewregionDidChange / regionWillChange)的委托方法。这再次导致了一次非常突然的转变。

任何人都可以告诉我如何做得更好吗?

1 个答案:

答案 0 :(得分:27)

我建议不要使用实际的id<MKAnnotation>(至少在“当前位置设置”模式下)。

相反:

  1. 在地图视图的 中添加包含图片(或您喜欢的任何图标)的视图(例如UIImageView)。
  2. 此引脚视图 应为地图视图的子视图。
  3. 图钉视图应该是地图视图是子视图的同一视图的子视图(例如,两者都应该是同一超视图的子视图)。
  4. 引脚视图的大小和位置应使其显示在地图视图的中心上方(您可以使引脚视图具有与地图视图相同的框架和相同的自动布局/自动调整逻辑,以便它们保持视觉同步,无论屏幕尺寸或方向)。
  5. 如果使用UIImageView,请将其内容模式设置为“中心”,将背景颜色设置为“清除”。
  6. 图钉视图应该禁用用户互动,以便用户仍然可以与其后面的地图视图进行互动。当用户平移或缩放地图视图时,前面的引脚视图似乎会立即移动。
  7. 如果需要,应用可以在mapView.centerCoordinate委托方法(或平移/捏动手势识别器)中获取regionDidChangeAnimated:的位置坐标,或仅在用户说他们已完成定位时获取位置坐标。我不建议使用计时器(尤其是每0.00001秒)来查询当前的中心坐标。
  8. 当用户指示当前位置是他们想要最终放置注释的位置时,您可以在该坐标处创建并添加实际注释并隐藏“位置设置模式”引脚视图。