如何才能在iOS中获得trueHeading一次?

时间:2017-03-06 07:37:30

标签: ios cllocationmanager

作为一名全新的iOS开发人员,我最近很难获得真正的海量数据。

class AR: CLLocationManagerDelegate{
    var heading:Float!

    func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {

        heading = Float(newHeading.trueHeading)
    }

}

通过上面的代码,我可以不断获得当前设备的方向。但是,我可以只获得一次trueHeading吗?另外,我测试了trueHeading,它会在几秒后准确。我可以在特定时间获得真正的头衔吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

每当你需要前往时,你可以致电

[self.locationManager startUpdatingHeading];

收到标题后,您可以执行

[self.locationManager stopUpdatingHeading];

要接收最新的派生标题,

self.locationManager.heading;

理想情况下,您调用startUpdatingHeading,向用户显示加载器或其他内容。 在didUpdateHeading中获得标题后,通过通知或其他内容将消息中继到控制器,并停止更新标题。

您无法设置标题的准确性,但您可以将headingFilter设置为仅在距离较远时更新。

/* Notify heading changes when heading is > 5.
 * Default value is kCLHeadingFilterNone: all movements are reported.
 */
self.locationManager.headingFilter = 5;

理想情况下,你不会停止,你继续访问标题,过滤器为5,确保它不会耗尽电池。

您可以将其存储在默认设置中,并在需要时使用它并进行更新。

如果您只需要一次,那么您可以通过等待一段时间来快速修复,或者让我们对该功能进行一些点击,但这不是一个理想的解决方案。

也许这也有帮助,但它主要是为了距离而不是前进。标题应该不断更新。

self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;

如果您想在应用启动时使用此功能,请在应用代理中执行此操作。