iphone app:关于CLLocationmanager和MKMapView之间交互的问题(显示当前用户位置)

ant*_*nio 5 iphone gps mkmapview cllocationmanager

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

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

  2. 通过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?

我很感激任何有线索的人.

Kon*_*ess 10

我的理解(基于我所看到的,而不是文档,因为我似乎无法找到任何涵盖此内容)是该showsUserLocation属性导致mapView CLLocationManager使用最高精度设置(1米距离过滤器,最佳准确度)启动实例,然后更新其蓝色圆圈注释视图,因为该位置管理器返回更新.它还根据位置更新的水平精度更新圆形覆盖.我相信这个实例与CLLocationManager你自己开始的任何实例是分开的,因为我也CLLocationManager并行运行,并且看不到地图视图当前位置更新的任何干扰.

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

我知道这基本上是重新发明轮子,但我相信这是获得Apple所提供的工具所需功能的唯一途径.如果其他人不知道,请加入,因为我也会感兴趣.