为什么MKCoordinateRegion不会显示小区域?

时间:2019-05-04 22:13:21

标签: ios swift mapkit mkcoordinateregion

我有以下代码将MKCoordinateRegion设置为MKMapView:

override func viewDidLoad() {
    super.viewDidLoad()

    mapView.showsUserLocation = true
    mapView.setUserTrackingMode(.followWithHeading, animated: true)

    currentLocationCoordinateRegion = MKCoordinateRegion(center: mapView.userLocation.coordinate, latitudinalMeters: 25, longitudinalMeters: 25)
    mapView.setRegion(currentLocationCoordinateRegion, animated: true)

    locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
    locationManager.distanceFilter = kCLDistanceFilterNone

    let status = CLLocationManager.authorizationStatus()

    if status == .authorizedAlways || status == .authorizedWhenInUse, status == .restricted {

    } else {

        locationManager.requestAlwaysAuthorization()

    }

}

func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) {

    if currentLocationCoordinateRegion == nil {

        currentLocationCoordinateRegion = MKCoordinateRegion(center: mapView.userLocation.coordinate, latitudinalMeters: 25, longitudinalMeters: 25)

        mapView.setRegion(currentLocationCoordinateRegion, animated: true)

    }

}

但是,地图视图显示的区域远大于20米乘20米。

问题出在哪里,我该如何解决?

2 个答案:

答案 0 :(得分:0)

我尝试在第一次运行该代码后第二次运行该代码。只是第一次没有完全放大。

答案 1 :(得分:0)

问题可能在这里:

func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) {
    if currentLocationCoordinateRegion == nil { // <--
        currentLocationCoordinateRegion = MKCoordinateRegion(center: mapView.userLocation.coordinate, latitudinalMeters: 25, longitudinalMeters: 25)
        mapView.setRegion(currentLocationCoordinateRegion, animated: true)
    }
}

这是我的理论。在开始使用时,Core Location会尝试获取用户位置的修补程序。最初,用户所在位置只有一个模糊的概念,您会得到didUpdate。但是,运气好的话,用户会在哪里得到更好的主意,并且您再次获得didUpdate 。然后再次。再说一次,直到我们有一个好的解决方案。但是,您将丢弃第二,第三,第四次更新-一旦获得第一次更新,便会停止。我建议,这就是为什么第二次更好的原因。核心位置有时间获得更好的修复。