У меня есть карта, установленная для поворота в местоположение пользователя Как мне разрешить пользователю взаимодействовать с картой? - PullRequest
1 голос
/ 30 мая 2019

У меня установлена ​​карта по центру и повороту в направлении и местоположении пользователя, но вид карты заблокирован, так как я не могу с ним взаимодействовать.

extension MapScreen: CLLocationManagerDelegate {
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        guard let location = locations.last else { return }
        let region = MKCoordinateRegion.init(center: location.coordinate, latitudinalMeters: regionInMeters, longitudinalMeters: regionInMeters)
        mapView.setRegion(region, animated: true)


    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        checkLocationAuthorization()

    func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
        mapView.camera.heading = newHeading.magneticHeading
        mapView.setCamera(mapView.camera, animated: true)
            }
        }
    }
}

Как разрешить пользователю исследовать свое окружение; прокручивать, масштабировать, взаимодействовать с булавками и так далее, одновременно центрируя и поворачивая для пользователя?

Ответы [ 2 ]

2 голосов
/ 30 мая 2019

Используя метод делегата didUpdateLocations, вы постоянно обновляете представление карты, переопределяя любые изменения, сделанные пользователем.

Решение состоит в том, чтобы не использовать CLLocationManager методы делегата для обновления вида карты.

Просто установите userTrackingMode на карте на .followWithHeading, и просмотр карты сделает всю работу за вас.Как только пользователь взаимодействует с картой, режим отслеживания изменится на .none.

. Вы можете добавить кнопку, чтобы повторно активировать .followWithHeading режим отслеживания пользователя.

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

Это то, что я в итоге собрал, и это прекрасно работает.

func centerViewOnUserLocation() { mapView.setUserTrackingMode(.followWithHeading, animated:true)}

...