【问题标题】:How to manually trigger CLLocationManager update?如何手动触发 CLLocationManager 更新?
【发布时间】:2015-07-14 01:12:39
【问题描述】:
我正在使用这些配置监控用户位置:
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
locationManager.requestAlwaysAuthorization()
locationManager.startMonitoringSignificantLocationChanges()
我有一个开关,允许用户手动输入地址或允许 GPS 跟踪。当从手动切换到 GPS 位置时,我想踢CLLocationManager 以更新用户位置并调用didUpdateLocations 事件。否则,它只是等待并等待更新。是否可以手动触发一次更新?
【问题讨论】:
标签:
ios
swift
ios8
core-location
【解决方案1】:
来自文档:
开始更新位置
连续多次调用此方法不会自动生成新事件。但是,在这两者之间调用 stopUpdatingLocation 确实会在您下次调用此方法时发送一个新的初始事件。
这样您就可以停止并立即重新启动位置更新以手动触发它!
【解决方案2】:
是否可以手动触发一次更新
是的,但不是startMonitoringSignificantLocationChanges。您需要致电startUpdatingLocation。请注意,即便如此,在您获得单个可用更新之前,可能需要多次调用您的代理,并且需要几秒钟。
我所做的 (example code here) 是同时观看 horizontalAccuracy 和 timestamp,并在我要么获得足够准确的位置时停止或时间过长。
【解决方案3】:
当您想要开始扫描更新时启动它,而不是当您想要一个即时位置时启动它。
如果您想要一个即时位置,请通过manager.location 请求它。如果响应为nil,则当前没有可用的位置,您需要等待。如果返回位置,您可以检查timestamp 以确定您是否可以使用它。