【问题标题】:Stopping user location updates (the blue dot) for MKMapview停止 MKMapview 的用户位置更新(蓝点)
【发布时间】:2013-01-03 16:00:58
【问题描述】:

我正在为我的应用程序使用 CLLocationManager 和 MKMapView 的实例。我有一个点击按钮,将触发我的位置管理器的 startUpdatingLocation,它允许我通过 didUpdateToLocation 回调接收新的位置更新。一旦我对准确性感到满意,我就会停止这些更新:

[locationManager stopUpdatingLocation];
locationManager.delegate = nil;

问题是,GPS 仍然处于打开状态,如状态栏右上角的箭头所示。经过进一步调查,我意识到这是由于mapView有showsUserLocation = YES,这意味着它会继续接收更新,即使我自己的locationManager实例已经停止更新。

在我停止更新后添加以下内容会关闭 GPS 标志,但蓝点显然消失了(但我确实希望当前位置仍然存在以进行可视化)。

mapView.showsUserLocation = NO;

对于我的应用程序,我需要同时使用 CLLocationManager(计算一定距离内最近的 POI)和 MKMapView(主要用于将这些 POI 显示为我的位置周围的注释)。有没有办法简单地停止对两者的所有 GPS 更新,并在此时冻结蓝点?

我想过完全禁用 mapView.showsUserLocation,并将 CLLocation 从 LocationManager 绘制到 mapView 作为自定义注释,但我不确定这是最好的方法。有什么想法吗?

【问题讨论】:

  • 如果您将showsUserLocation 设置为YES,这本质上意味着您希望保持定位服务开启。显示用户曾经的位置并不是显示他们的位置,而是显示他们的历史。除非位置服务已打开,否则您无法知道位置没有改变。即使使用 geofencing 仍在使用位置服务。我认为在地图上有一个 stale 用户位置点会让用户感到困惑。但是,如果您真的想要这样做,我认为绘制自己的自定义注释(使用蓝点图像的注释视图)将是可行的方法。

标签: iphone ios mapkit core-location cllocationmanager


【解决方案1】:

我认为,一旦您将位置更新到所需的精度,删除注释图钉就足以让用户知道所选位置。这在 MKMapView 用法中是相当标准的。

要考虑的另一件事是,即使在您停止监视位置之后,位置箭头实际上也会持续一段时间(取决于使用类型)。您可以在 Apple 的位置指南中找到它的持续时间,但也需要考虑。

【讨论】:

    猜你喜欢
    • 2011-08-30
    • 2014-08-29
    • 2012-09-16
    • 2011-09-11
    • 2011-09-18
    • 1970-01-01
    • 2012-11-29
    • 2023-03-10
    • 2013-11-13
    相关资源
    最近更新 更多