2013-12-22 31 views
5

我在我的应用中实现了地图功能,允许用户通过平移来设置其当前位置。在平移时跟踪MKMapView中心坐标

所有这一次,我想在centerCoordinate有一个MKAnnotation。所以我想要做的就是跟踪地图的centerCoordinate何时发生变化并正确更改注释的坐标。该行为将类似于优步,Hailo等。

我试过了一个基于时间的实现,其中每个0.00001scenterCoordinate将被检查并且注释也将被移动。但是,如果地图不轻轻地滑动,则注释会从一个地方跳到另一个地方,这不会构成一个好的用户界面。

我试过的另一个实现是通过手势识别器和MKMapViewregionDidChange/regionWillChange)的代理方法。这也是一次非常突然的过渡。

任何人都可以请告诉我如何更好地做到这一点?

回答

24

我建议根本不要使用实际的id<MKAnnotation>(至少对于这个“当前位置设置”模式)。

相反:

  1. 前方的地图视图的添加含有销(或任何你喜欢的图标)的图像的视图(例如UIImageView)。
  2. 该针脚视图应为不是是地图视图的子视图。
  3. 针视图应该是地图视图是子视图的同一视图的子视图(例如,两个视图都应该是同一个超视图的子视图)。
  4. 针视图的大小和位置应该位于地图视图中心的上方(您可以使针视图具有与地图视图相同的框架和相同的自动布局/自动存储逻辑,以便它们保持视觉上的同步屏幕尺寸或方向)。
  5. 如果使用UIImageView,请将其内容模式设置为“中心”,并将背景色设置为“清除”。
  6. 销钉视图应该有禁用用户互动,以便用户仍然可以与其后面的地图视图交互。当用户平移或缩放地图视图时,前面的视图会立即移动。
  7. 如有必要,应用程序可以从mapView.centerCoordinateregionDidChangeAnimated:委托方法(或平移/捏手势识别器)中获取位置坐标,或者仅在用户说他们已完成定位时才能获取位置坐标。我不建议使用定时器(特别是每个0.00001s)来查询当前的中心坐标。
  8. 当用户指出当前位置是他们想要最终放置注释的位置时,您可以在该坐标处创建并添加实际注释并隐藏“位置设置模式”针视图。
+0

哈哈,够公平的。我也考虑过这一点,但我想我太固执了,想通过MKAnnotation操作来实现它。感谢给我我需要的微调。节日快乐! –

+0

这工作得很好。 – quantumpotato