Я пытаюсь обновить свой интерфейс соответствующим образом, когда аннотация 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 после.