Почему MKCoordinateRegion не покажет маленький регион? - PullRequest
0 голосов
/ 05 мая 2019

У меня есть следующий код для установки 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 голосов
/ 08 мая 2019

Проблема, вероятно, здесь:

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 снова . И опять. И снова, пока мы не исправим. Но вы выбрасываете второе, третье, четвертое обновления - вы останавливаетесь, как только вы получаете первое обновление. Я полагаю, именно поэтому он работает лучше во второй раз; Базовое расположение успело найти лучшее решение.

0 голосов
/ 06 мая 2019

Я попытался запустить этот код после первого запуска, а во второй раз он работает. В первый раз он не полностью масштабируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...