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

时间:2011-06-04 05:35:21

标签: iphone gps mkmapview cllocationmanager

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

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

  2. 通过LocationManager获取GPS修复后(仅当获得此修复时),我创建并显示地图。 CLLocationManager和MKmapView都是同一个ViewController的一部分。要显示当前位置,我设置mapView.showsUserLocation:YES,以显示蓝点。我开始使用的locationManager仍在继续工作,获得GPS更新。

  3. Apple文档说明在MKMapView上显示了UserLocation:

    将此属性设置为YES会导致地图视图使用Core Location框架查找当前位置。只要此属性为YES,地图视图就会继续跟踪用户的位置并定期更新。

    没有关于它对MKMapView当前位置使用的精度或距离滤波器的说法。在我看来,在这一点上,我有自己开始的locationManager和mapView自己的locationManager两个更新位置!

    请记住,我想通过设置精度和距离滤镜来节省一些电量?这些参数是否会被mapView的locationManager所尊重?

    此外,这两位位置经理是否会与另一位经理同步?我更新了地图,使其与我原来的locationManager获得的新GPS坐标居中。但我也希望在地图的中心可以看到蓝点。是否每次都会更新,因为我将mapView的showsUserLocation设置为TRUE?

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

1 个答案:

答案 0 :(得分:10)

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

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

我知道这实际上是重新发明轮子,但我相信这是获得所需功能的唯一方法,这取决于Apple提供的工具。如果其他人不知道,请加入,因为我也会感兴趣。