iPhone 应用程序 : Questions on interaction between CLLocationmanager and MKMapView (showing current user location)

标签 iphone gps mkmapview cllocationmanager

在我的 iPhone 应用程序中,我有以下逻辑:

  1. 启动 CLLocationManger(用户可以向位置管理器提供精度和距离过滤器参数,因为在我的情况下不需要最佳精度,100-300 米就可以了,我想节省电池) .

  2. LocationManager 获得 GPS 修复后(并且仅当获得此修复时),我创建并显示 map 。 CLLocationManager 和 MKmapView 都是同一个 ViewController 的一部分。为了显示当前位置,我设置了mapView.showsUserLocation:YES,以显示蓝点。我启动的 locationManager 仍在工作,获取 GPS 更新。

Apple 文档在 MKMapView 显示用户位置上这样说:

将此属性设置为 YES 会导致 map View 使用核心位置框架来查找当前位置。只要此属性为 YES, map View 就会继续跟踪用户的位置并定期更新。

没有说明 MKMapView 的当前位置使用哪种精度或距离过滤器。在我看来,此时,我自己启动的 locationManager 和 mapView 自己的 locationManager 都在更新位置!

还记得吗,我想通过设置精度和距离过滤器来节省一些电池? mapView 的 locationManager 是否会考虑这些参数?

此外,这两个位置管理器是否会彼此同步?我更新了 map ,以使用我原来的 locationManager 获取的新 GPS 坐标为中心。但我还希望蓝点在 map 中心可见。由于我将mapView 的showsUserLocation 设置为TRUE,它每次也会更新吗?

如果有人对此有线索,我将不胜感激。

最佳答案

我的理解(基于我所看到的,而不是基于文档,因为我似乎找不到任何涵盖这一点的内容)是 showsUserLocation 属性导致 mapView 启动 CLLocationManager 实例使用最高精度设置(1m 距离过滤器,最佳精度),然后在位置管理器返回更新时更新其蓝色圆圈注释 View 。它还根据位置更新的水平精度更新圆形覆盖。我相信 CLLocationManager 的这个实例与您可能自己启动的任何实例是分开的,因为我还并行运行 CLLocationManager 并且没有看到来自 map View 当前位置的任何干扰更新。

因此,如果您不希望MKMapView运行自己的高精度位置管理器实例,请禁用showsUserLocation并创建并手动更新您自己的当前位置MKAnnotationView 基于您的 CLLocationManager 的位置更新。您还可以根据需要缩放到新的更新。

我知道这本质上是重新发明轮子,但我相信这是根据苹果提供的工具获得你想要的功能的唯一方法。如果其他人知道的话,请插话,因为我也感兴趣。

关于iPhone 应用程序 : Questions on interaction between CLLocationmanager and MKMapView (showing current user location),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6234978/

相关文章:

android - 三星 Android 设备上的 GPS 问题?

regex - 如何使用 grep 查找损坏的 NMEA 日志句子?

iPhone SDK : Convert MKMapPoint to CGPoint

ios - 如何在 swift 3 中将 MKPolylines 添加到 MKSnapShotter?

iphone - 单击 DetailDesclosure 按钮时 MKAnnotationView 推送到 View Controller

iphone - 如何对包含 N 个数字的 NSMutableArray 进行排序?

ios - 到达表底部时 TableView 出现错误

javascript - 我如何像 iPhone 一样在我的 HTML 文本输入框中放置一个清除按钮?

iphone - 奇怪的新 iOS 7 错误 : receiver from DB/ForceShrinkPersistentStore_NoLock

android - 什么更消耗我的电池? wifi、数据连接 (3g) 或 GPS。安卓