【问题标题】:Custom user location marker with custom accuracy circle in MKMapView在 MKMapView 中使用自定义精度圈自定义用户位置标记
【发布时间】:2015-11-09 20:55:50
【问题描述】:

我正在实现简单的导航并显示用户位置我正在使用自定义 MKAnnotationView

let reuseId = "userLocationPin"
userLocationViewAnnotation = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView
if userLocationViewAnnotation == nil {

    userLocationViewAnnotation = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
    userLocationViewAnnotation!.canShowCallout = true
    userLocationViewAnnotation!.centerOffset = CGPoint(x: 0.9, y: -2)
    userLocationViewAnnotation!.image = UIImage(named: "User_location_red_moving_x1")

}

这段代码运行良好。接下来我需要添加精度圈。我通过 MKCircle 叠加添加它:

userLocationCircle = MKCircle(centerCoordinate: location.coordinate, radius: location.horizontalAccuracy)
map.addOverlay(userLocationCircle!)

问题是用户位置更新更频繁,并且在内部使用 MKMap 动画,但圆圈在用户位置更改后更新(在我的代码中),所以它从一个点跳到另一个点。

是否可以将这个圈子添加到MKAnnotationView,或者您有什么其他想法?

【问题讨论】:

  • 嗨,Michal,您有没有找到合适的解决方案来解决您的问题?我目前面临同样的问题!

标签: ios swift mkmapview mapkit


【解决方案1】:

解决方案 1(我之前做过)

不要将MKMapView.showsUserLocation 设置为真。这意味着您不能再使用委托的mapView:didUpdateUserLocation:。这意味着获取用户的位置不太方便。为此,您将不得不使用核心位置。 (周围有大量教程) 然后你必须相应地设置地图的中心和跨度,但你自己。通过这样做,您可以为用户的位置添加任何您想要的注释。只需回复mapView(_:viewForAnnotation:) 并返回您想要显示的视图。

解决方案 2:(我猜这可行,但我自己从未尝试过)

只需像以前一样使用 MKMapView.showsUserLocation,但无论如何都要回复mapView(_:viewForAnnotation:)。调试它。在第一次调用此方法时,它会被传递到标准用户注释中。 (我只是不知道它的类型/类名。这是第一个。这就是为什么我要求你调试它。) 只是不要返回 nil 而是返回您想要显示的视图。

值得一试。如果可行,它比解决方案 1 的工作量少。

但是,解决方案 1 为您提供了更大的灵活性和对当前显示在地图中的部分世界的完全控制。

【讨论】:

  • 我不明白解决方案 2,现在我在 mapView(_:viewForAnnotation:) 中返回我的自定义视图,而不是零,而且这个视图没有圆圈,这是一个简单的点。此方法在开始时仅执行一次,而不是在每次位置/注释更新时执行。
  • 你得到了什么结果?正如我所说,我自己从未尝试过。这个想法刚刚出现。
  • 我在我的问题中描述结果,注释更新非常频繁且流畅,但圆圈从一个点跳到另一个点
猜你喜欢
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多