Кнопка SwiftUI взаимодействует с картой

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

Я могу отображать карту с помощью Mapbox, но я не знаю, как следить за своим пользователем, когда я нажимаю кнопку.

Я не знаю, как взаимодействовать с моей кнопкой с моей структурой MapView

Это мой код:

MapView.swift:

import Mapbox

struct MapView: UIViewRepresentable {

    let mapView: MGLMapView = MGLMapView(frame: .zero)

    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

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

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

    }

    func styleURL(_ styleURL: URL) -> MapView {
        mapView.styleURL = styleURL
        return self
    }

    func centerCoordinate(_ centerCoordinate: CLLocationCoordinate2D) -> MapView {
        mapView.centerCoordinate = centerCoordinate
        return self
    }

    func zoomLevel(_ zoomLevel: Double) -> MapView {
        mapView.zoomLevel = zoomLevel
        return self
    }

    func userTrackingMode(_ userTrackingMode: MGLUserTrackingMode) -> MapView {
        mapView.userTrackingMode = userTrackingMode
        return self
    }
}

class Coordinator: NSObject, MGLMapViewDelegate {
    var parent: MapView

    init(_ parent: MapView) {
        self.parent = parent
    }
}

ContentView.swift:

import Mapbox

struct ContentView: View {

    @Environment(\.colorScheme) var colorScheme: ColorScheme

    var body: some View {
        ZStack {
            MapView()
                .userTrackingMode(.follow)
                .edgesIgnoringSafeArea(.all)
            HStack(alignment: .top) {
                Spacer()
                VStack() {
                    Button(action: {
                        //ACTION TO CHANGE FOLLOW MODE
                    }) {
                        Image(systemName: "location.fill")
                            .frame(width: 40.0, height: 40.0)
                    }
                    .padding(.top, 60.0)
                    .padding(.trailing, 10.0)
                    .frame(width: 45.0, height: 80.0)
                    Spacer()
                }

            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView().environment(\.colorScheme, .dark)
    }
}

Большое спасибо!

1 ответ

Решение

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

подобно

...

let myMapHolder = MapView()
var body: some View {
    ZStack {
        myMapHolder
            .userTrackingMode(.follow)
            .edgesIgnoringSafeArea(.all)
    ...



       VStack() {
            Button(action: {
                self.myMapHolder.mapView.userTrackingMode = _your_mode_
            }) {
                Image(systemName: "location.fill")
Другие вопросы по тегам