ios - 平移时跟踪 MKMapView centerCoordinate

标签 ios mkmapview mapkit mkannotation

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

一直以来,我都希望在 centerCoordinate 中有一个 MKAnnotation。所以我想做的是跟踪 map 的 centerCoordinate 何时更改并正确更改注释的坐标。该行为类似于 UberHailo 和其他公司的行为。

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

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

谁能告诉我如何做得更好?

最佳答案

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

相反:

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

关于ios - 平移时跟踪 MKMapView centerCoordinate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20731589/

相关文章:

ios - View 显示在调试 View 层次结构中,但不显示在设备/sim 上

swift - 在自定义注释 mapkit swift 4 前面/下面添加标题

php - 自动生成pkpass文件并发送到钱包Iphone

ios - Restkit 缓存策略 20.x

ios - CALayer 优化?

iphone - 为什么 MKMapView 不会停止显示用户位置?

iOS - 创建自定义 MKAnnotation 标注时出现问题

ios - 如果我使用 MKMapCamera,Compass 将无法在 MKMapView 上工作

ios - 在 setRegion 上取消选择 MKAnnotationView

mapkit - MKMarkerAnnotationView 簇颜色