在我的iPhone应用程序中,我有以下逻辑:
启动CLLocationManger(用户可以向定位管理器提供精度和距离滤波器参数,因为在我的情况下不需要最高精度,100-300米会很好,我想在此节省电池)
通过LocationManager获取GPS修复后(仅当获得此修复时),我创建并显示地图。 CLLocationManager和MKmapView都是同一个ViewController的一部分。要显示当前位置,我设置mapView.showsUserLocation:YES,以显示蓝点。我开始使用的locationManager仍在继续工作,获得GPS更新。
Apple文档说明在MKMapView上显示了UserLocation:
将此属性设置为YES会导致地图视图使用Core Location框架查找当前位置。只要此属性为YES,地图视图就会继续跟踪用户的位置并定期更新。
没有关于它对MKMapView当前位置使用的精度或距离滤波器的说法。在我看来,在这一点上,我有自己开始的locationManager和mapView自己的locationManager两个更新位置!
请记住,我想通过设置精度和距离滤镜来节省一些电量?这些参数是否会被mapView的locationManager所尊重?
此外,这两位位置经理是否会与另一位经理同步?我更新了地图,使其与我原来的locationManager获得的新GPS坐标居中。但我也希望在地图的中心可以看到蓝点。是否每次都会更新,因为我将mapView的showsUserLocation设置为TRUE?
我很感激任何有线索的人。
答案 0 :(得分:10)
我的理解(基于我所看到的,而不是文档,因为我似乎找不到任何内容)是showsUserLocation
属性导致mapView使用CLLocationManager
实例启动最高精度设置(1米距离过滤器,最佳精度),然后更新其蓝色圆圈注释视图,因为该位置管理器返回更新。它还根据位置更新的水平精度更新圆形覆盖。我相信CLLocationManager
的这个实例与您自己开始的任何实例是分开的,因为我还并行运行CLLocationManager
,并且看不到地图视图当前位置更新的任何干扰。
因此,如果您不希望MKMapView
运行自己的高精度位置管理器实例,请停用showsUserLocation
并创建并手动更新您自己的当前位置MKAnnotationView
您的CLLocationManager
位置更新。您还可以根据需要缩放到新的更新。
我知道这实际上是重新发明轮子,但我相信这是获得所需功能的唯一方法,这取决于Apple提供的工具。如果其他人不知道,请加入,因为我也会感兴趣。