我在我的应用程序中实现了一个 map 功能,允许用户通过平移来设置他们的当前位置。
一直以来,我都希望在 centerCoordinate
中有一个 MKAnnotation
。所以我想做的是跟踪 map 的 centerCoordinate 何时更改并正确更改注释的坐标。该行为类似于 Uber、Hailo 和其他公司的行为。
我尝试了一个基于时间的实现,其中每 0.00001s 将检查 centerCoordinate
并且注释也会被移动。但是,如果不轻轻地轻弹 map ,注释就会从一个地方跳到另一个地方,这不会构成良好的 UI。
我尝试的另一种实现是通过手势识别器和 MKMapView
的委托(delegate)方法 (regionDidChange
/regionWillChange
)。这再次导致非常突然的转变。
谁能告诉我如何做得更好?
最佳答案
我建议不要使用实际的 id<MKAnnotation>
完全没有(至少对于这个“当前位置设置”模式)。
相反:
- 在 map View 的前面 添加一个 View (例如
UIImageView
),其中包含图钉(或您喜欢的任何图标)的图像。 - 此图钉 View 不应是 map View 的 subview 。
- 图钉 View 应该是 map View 是同一 View 的 subview (例如,两者应该是同一父 View 的 subview )。
- 图钉 View 的大小和位置应使其显示在 map View 的中心上方(您可以使图钉 View 与 map View 具有相同的框架和相同的自动布局/自动调整逻辑,以便它们在视觉上保持同步,无论屏幕尺寸或方向)。
- 如果使用
UIImageView
,将其内容模式设置为“居中”,将背景颜色设置为“清晰”(默认为清晰)。 - 图钉 View 应在其上禁用用户交互,以便用户仍然可以与其背后的 map View 进行交互。当用户平移或缩放 map View 时,前面的图钉 View 似乎会立即移动。
- 如有必要,应用程序可以从
mapView.centerCoordinate
获取位置坐标在regionDidChangeAnimated:
MKMapViewDelegate 方法(或平移/捏合手势识别器)或仅当用户说他们完成定位时。我不建议使用计时器(尤其是每 0.00001 秒一次)来查询当前中心坐标。 - 当用户指示当前位置是他们最终要放置注释的位置时,您可以在该坐标处创建并添加实际注释并隐藏“位置设置模式”图钉 View 。
关于ios - 平移时跟踪 MKMapView centerCoordinate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20731589/