跟踪MKMapView中心协调同时平移

我在我的应用程序中实现了地图function,允许用户通过平移来设置当前位置。

所有这一次,我想在centerCoordinate MKAnnotation centerCoordinate有一个MKAnnotation 。 所以我想要做的就是跟踪地图的中心坐标变化的时间,正确地改变注释的坐标。 这种行为与UberHailo等人的行为类似。

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

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

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

我build议不要使用实际的id<MKAnnotation> (至less在这个“当前位置设置”模式)。

代替:

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