Кнопка в ContentView, которая увеличивает текущее местоположение на карте MapBox? - PullRequest
2 голосов
/ 11 июля 2020

Итак ... в моем координаторе - который соответствует протоколу делегата mapbox, я могу просто сделать:

mapView.setCenter(mapView.userLocation!.coordinate, zoomLevel: 13, animated: true)

, и эта функция отлично работает в координаторе или когда она вызывается в mapView класс. Единственная проблема в том, что я не знаю, как передать этот экземпляр mapView (в частности, обратно в ContentView, где я хочу иметь кнопку, делающую то же самое). У меня также есть структура LocationManager, но я не знаю, насколько она полезна. Передача экземпляра MapView - это самый простой способ sh выполнить то, что я хотел бы сделать?

Заранее спасибо!

1 Ответ

1 голос
/ 11 июля 2020

Вот демо решения (основано на MapKit, но не важно для идеи). Протестировано с Xcode 12.

struct DemoActionToMapView: View {
    @State private var centerToUser: () -> () = {}
    var body: some View {
        VStack {
            Button("Center", action: centerToUser)
            MapView { map in
                self.centerToUser = {
                    map.setCenter(map.userLocation.coordinate, animated: true)
                }
            }
        }
    }
}

struct MapView: UIViewRepresentable {
    var configure: (MKMapView) -> () = { _ in }

    func makeUIView(context: Context) -> MKMapView {
        let map = MKMapView()
        DispatchQueue.main.async {
            configure(map)
        }
        return map
    }

    func updateUIView(_ uiView: MKMapView, context: Context) {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...