Как предотвратить автоматическое масштабирование с помощью IOS MapKit при использовании userTrackingMode = .followWithHeading? (с использованием SwiftUI)

Как можно предотвратить автоматическое масштабирование с помощью IOS MapKit при использовании userTrackingMode = .followWithHeading? То есть я устанавливаю текущее местоположение пользователя в центре экрана и использую view.userTrackingMode = .followWithHeading, чтобы карта была ориентирована на север, но при увеличении / уменьшении масштаба вручную MapView автоматически отменяет это и возвращается назад. на тот уровень, на котором он, кажется, предпочитает находиться.

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

Я использую SwiftUI, поэтому у меня действительно есть местоположение, передаваемое в GCMapView в качестве параметра (в качестве средства для поддержания SwiftUI GCMapView в актуальном состоянии с указанием последнего местоположения пользователя). Не уверены, что это вызывает проблему?

Некоторые ключевые фрагменты (вытащили код, чтобы показать соответствующие строки) используемых мной обратных вызовов MapKit:

      struct FlightView: View {
    @EnvironmentObject var locationManager : GCLocationManager
    @State var centreUserLocation : Bool = false

    var body: some View {
            GCMapView(
                flight: flight,
                userLocation: locationManager.userLocation,
                centreUserLocation: centreUserLocation,
                initalZoomDone: initalZoomDone
            )
    }
}

struct GCMapView : UIViewRepresentable {
    let map = MKMapView()
    func makeUIView(context: Context) -> MKMapView {
        map.delegate = context.coordinator
        map.isRotateEnabled = true
        map.userTrackingMode = .followWithHeading
        map.showsUserLocation = true
        return map
    }
    func updateUIView(_ view: MKMapView, context: Context) {
        if let userLocation = userLocation {
            view.centerCoordinate = userLocation
            view.userTrackingMode = .followWithHeading // Needed to keep map rotating to align to North
        }
    }
    
    func makeCoordinator() -> Coordinator {
        return Coordinator(self)
    }
    class Coordinator: NSObject, MKMapViewDelegate {
        var parent: GCMapView
        init(_ parent: GCMapView) {
            self.parent = parent
            super.init()
        }
    }
}

0 ответов

Другие вопросы по тегам