在平移时跟踪MKMapView centerCoordinate

Sor*_*ban 5 mapkit mkmapview mkannotation ios

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

这一切的时候,我想有一个MKAnnotationcenterCoordinate.所以我想要做的是跟踪地图的centerCoordinate何时更改并正确更改注释的坐标.这种行为与Uber,Hailo和其他人的行为类似.

我尝试了基于时间的实现,每一个0.00001scenterCoordinate将进行检查和注释也将被移动.但是如果地图没有轻轻地轻弹,那么注释会从一个地方跳到另一个地方,这不会形成一个好的UI.

我尝试的另一个实现是通过手势识别器和MKMapView(regionDidChange/ regionWillChange)的委托方法.这再次成为一个非常突然的过渡.

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

小智 27

我建议不要使用实际id<MKAnnotation>(至少对于这种"当前位置设置"模式).

代替:

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