Как узнать, выбрана ли аннотация с MapBox в SwiftUI? - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь обновить свой интерфейс соответствующим образом, когда аннотация MapBox выбрана с помощью swiftUI. Все работает хорошо, пока я не изменил bool в MapView Coordinator. Как только я это сделаю, аннотации не будут обновляться.

struct MainView: View {


@State var annotations: [MGLPointAnnotation] = []
@State var pingDetailsShown = false

    var body: some View {

        ///...

        MapView(annotations: self.$annotations, pingDetailsShown: self.$pingDetailsShown).centerCoordinate(.init(latitude: 53.460067, longitude: -114.996973)).zoomLevel(5.0)
//...

MapView

struct MapView: UIViewRepresentable {

@Binding var annotations: [MGLPointAnnotation]
@Binding var pingDetailsShown: Bool

private let mapView: MGLMapView = MGLMapView(frame: .zero, styleURL: MGLStyle.streetsStyleURL)

func makeUIView(context: UIViewRepresentableContext<MapView>) -> MGLMapView {
    mapView.delegate = context.coordinator
    return mapView
}

func updateUIView(_ uiView: MGLMapView, context: UIViewRepresentableContext<MapView>) {
    updateAnnotations()

}

func makeCoordinator() -> MapView.Coordinator {
    Coordinator(self, pingDetailsShown: $pingDetailsShown)
}

private func updateAnnotations() {
    if let currentAnnotations = mapView.annotations {
        mapView.removeAnnotations(currentAnnotations)
    }
    mapView.addAnnotations(annotations)
}

Здесь я сталкиваюсь с проблемами ...

final class Coordinator: NSObject, MGLMapViewDelegate {
    var control: MapView
    var startZoom: Double = 5.0
    @Binding var pingDetailsShown: Bool

    init(_ control: MapView, pingDetailsShown: Binding<Bool>) {
        self.control = control
        self._pingDetailsShown = pingDetailsShown
    }

    func mapView(_ mapView: MGLMapView, didSelect annotation: MGLAnnotation) {
        print(((annotation.title ?? "") ?? ""))

        pingDetailsShown = true
    }

    func mapView(_ mapView: MGLMapView, didDeselect annotationView: MGLAnnotationView) {

            pingDetailsShown = false

        }
}

У меня есть пробовал pingDetailsShown как не привязанный, но такая же проблема возникает, как только я меняю значение pingDetailsShown, он больше не позволяет обновлять аннотации MapView.

Все, что я пытаюсь сделать, это обновить MainView Пользовательский интерфейс, когда аннотация выбрана, и аннотации по-прежнему обновляются sh после.

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