【问题标题】:iphone app: Questions on interaction between CLLocationmanager and MKMapView (showing current user location)iphone app:关于CLLocationmanager和MKMapView交互的问题(显示当前用户位置)
【发布时间】:2011-06-04 05:35:20
【问题描述】:

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

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: iphone gps mkmapview cllocationmanager


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      • 2011-08-30
      • 2014-10-16
      相关资源
      最近更新 更多