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