Как добавить MKMapCamera и прочитать текущее значение?

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

Думаю, что это можно решить через камеру, но не знаю, как это сделать.

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

Мой код:

      import SwiftUI
import MapKit

struct MapScreenView: View {

    @StateObject private var vm = LocationsViewModel()
    @State private var camera = MKMapCamera(lookingAtCenter: CLLocationCoordinate2D(latitude: 55.755864, longitude: 37.617698), fromDistance: 7500, pitch: 0, heading: 0)

    var body: some View {

        ZStack {
            VStack {
                HStack {
                    ButtonFilterView()
                    Spacer()
                }
                Spacer()
            }.zIndex(1)
            Map(coordinateRegion:
                    $vm.mapRegion, annotationItems: vm.locations) {
                location in
                MapAnnotation(coordinate: location.coordinate) {
                    LocationMapAnnotationView()
                        .scaleEffect(vm.mapLocation == location ? 1.1 : 0.7)
                        .offset(y: vm.mapLocation == location ? -11.5 : 0)
                        .animation(.easeInOut, value: vm.mapLocation == location)
                        .onTapGesture {
                            vm.showTappedLocation(location: location)
                        }
                }
            }

                    .onAppear {
                        MKMapView.appearance().isZoomEnabled = false
                        MKMapView.appearance().preferredConfiguration = MKStandardMapConfiguration(elevationStyle: .realistic)
                        MKMapView.appearance().pointOfInterestFilter = .some(MKPointOfInterestFilter.excludingAll)
                        MKMapView.appearance().isRotateEnabled = true
                        MKMapView.appearance().isPitchEnabled = true
                        MKMapView.appearance().isScrollEnabled = false
                    }
                    .edgesIgnoringSafeArea(.all)
        }
    }
}

struct MapScreenView_Previews: PreviewProvider {
    static var previews: some View {
        MapScreenView()
    }
}

      import Foundation
import MapKit
import SwiftUI

class LocationsViewModel: ObservableObject {

    @Published var locations: [Location] = LocationDataService.locations
    
    @Published var mapLocation: Location {
        didSet {
            updateMapRegion(location: mapLocation)
        }
    }

    @Published var mapRegion = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 55.755864, longitude: 37.617698),
                                                  span: MKCoordinateSpan(latitudeDelta: 0.1, longitudeDelta: 0.1))
    @Published var mapSpan = MKCoordinateSpan(latitudeDelta: 0.04, longitudeDelta: 0.04)
    
    init() {
        self.mapLocation = Location(name: "", coordinate: CLLocationCoordinate2D(latitude: 55.755864, longitude: 37.617698))
        updateMapRegion(location: Location(name: "", coordinate: CLLocationCoordinate2D(latitude: 55.755864, longitude: 37.617698)))
    }

    private func updateMapRegion(location: Location) {
        withAnimation(.easeInOut) {
            mapRegion.center = location.coordinate
        }
    }

    func showTappedLocation(location: Location) {
            mapLocation = location
    }
}

Думаю, что это можно решить через камеру, но не знаю, как это сделать.

0 ответов

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