我可以调整locationManager的频率(_:didUpdateLocations :)吗?

时间:2017-11-27 06:34:16

标签: swift cllocationmanager

在模拟器中,此方法只执行一次。

然而,当使用真实手机进行测试时,它会在同一位置运行多次。

我想控制这种方法的频率。

或者是否可以通过distanceFilter?

如果可能,该怎么办?

我怀疑只要位置发生变化,就会自动运行locationManager(_:didUpdateLocations :)方法,因此我无法控制它。

有办法吗?

import UIKit
import CoreLocation

class MainViewController: UIViewController, CLLocationManagerDelegate {

    let locationManager = CLLocationManager()


    override func viewDidLoad() {
        super.viewDidLoad()
        locationManager.delegate = self
        locationManager.requestAlwaysAuthorization()
        locationManager.startUpdatingLocation()
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        // my source code
    }
}

4 个答案:

答案 0 :(得分:1)

可接受的答案颇具误导性,自iOS 6起不推荐使用功能func locationManager(_ manager: CLLocationManager, didUpdateTo newLocation: CLLocation, from oldLocation: CLLocation)

deprecated method

设置所需的精度应解决在相对相同的点上获得许多更新的问题。对于不太精确的跟踪,请尝试

locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters

如果您担心长时间运行的跟踪任务/作业,请考虑实施

func locationManagerDidPauseLocationUpdates(CLLocationManager)

func locationManagerDidResumeLocationUpdates(CLLocationManager)

他们会通知您位置没有改变,并且为了节省电量,设备将关闭一些硬件。

CLLocationMangager

CLLocationManagerDelegate

答案 1 :(得分:0)

您可以设置位置准确度,如

self. locationManager.desiredAccuracy = kCLLocationAccuracyBest

请参阅https://developer.apple.com/documentation/corelocation/cllocationaccuracy

答案 2 :(得分:0)

我不确定你能控制它。您可以使用func locationManager(_ manager: CLLocationManager, didUpdateTo newLocation: CLLocation, from oldLocation: CLLocation) { }方法。此方法为您提供最后位置和新位置,并代表这些位置,您可以执行所需的功能。

或者你可以参考这个答案click here

答案 3 :(得分:0)

位置不会随模拟器而改变。您只会从didupdatelocations回调中获得一个调用。在真实设备上运行将导致完成处理程序连续触发。您可以使用GPX文件模拟位置,但我相信使用模拟器后,它不会触发更多的位置。

所需的准确度确实会改变发射频率,但该频率还取决于GPS硬件和电池寿命状态。 iOS将频率控制到一定程度以优化设备性能和寿命