MapView gps 中错误的初始用户位置

Wrong initial user location in MapView gps

我想获取用户位置,我就是这样做的: 我在 ViewController 中设置了 locationManager:

var locationManager = CLLocationManager()

func setUpLocationManager() {
    locationManager.delegate = self
    locationManager.distanceFilter = 5
    locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
    mapView?.showsUserLocation = true
    locationManager.startUpdatingLocation()
}

这是位置更新后调用的函数:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if !locations.isEmpty {
            print("\(locations[0])")
        }
    }
}

它打印了用户位置的初始位置(见图),但我认为这是错误的,因为它是一个近似值。 我也试过:

func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) {
    let accuracy = userLocation.location?.horizontalAccuracy
    if accuracy == locationManager.desiredAccuracy {
        print("\(locations[0])")
    }
}

但它从不打印位置,因为 locationManager.desiredAccuracy 等于 -2 而 accuracy 总是 > 0。

这是我在 mapView 上看到的:

最初用户图钉显示的位置接近真实位置(但不正确),随后用户图钉移动到真实用户位置。 我希望当用户 pin 位于正确位置时调用函数 didUpdateLocations。 我的问题类似于this,但在objective-c中。

有什么提示吗?谢谢

参考。 MKMapView's user location is wrong on startup or resume

Swift版本:

func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) {
    let accuracy = userLocation.location?.horizontalAccuracy
    if accuracy ... {

    }
}