更改 SwiftUI 地图位置而不重置距离?

问题描述 投票:0回答:1

如何在不影响缩放(或距 MapCamera 视点的距离)的情况下更新 SwiftUI 地图的位置。所以想要总体想要

  1. SwiftUI 地图位置通过从 CLLocationManager 传入的 GPS 坐标进行更新
  2. 用户可以在地图上自行放大/缩小
  3. 在随后的 GPS 位置更改中,我只想将地图移动到新位置,而不更改放大/缩小(即使用 MapCamera 时的“距离”)e

问题:在我下面的代码中,这不起作用,因为当尝试从 MapCamera 获取“当前距离”(又名缩放)时,即“mapCamPost.camera?distance”,该值似乎在用户之后变为“nil”放大地图。我怎样才能解决这个问题?或者使用新的 SwiftUI Map 的另一种方法来解决这个问题? (请注意,我在 UIKit MKMapCamera 上没有遇到此问题)

struct GCMap: View {
    
    @StateObject var locationMgr = GcFlightState()
    @State private var mapCamPos: MapCameraPosition = .automatic
    
    var body: some View {
        ZStack {
            Map(position: $mapCamPos) {
                Annotation("UserLocation", coordinate: self.locationMgr.location.coordinate) {
                    Image(systemName: "airplane.circle").rotationEffect(.degrees(270))
                }
            }
            .onMapCameraChange() {
                print("onMapCameraChange \(mapCamPos.camera?.distance)")
            }
            .onReceive(locationMgr.$location) { location in
                mapCamPos =  .camera(MapCamera(
                    centerCoordinate: location.coordinate,
                    distance: mapCamPos.camera?.distance ?? 1000,   // <<===
                    heading: location.course
                ))
            }
            
        }
    }
}
swiftui mapkit core-location mkmapcamera
1个回答
0
投票

您可以使用额外的

distance
来跟踪相机的
@State

@State private var distance = 1000.0
.onMapCameraChange(frequency: .continuous) {
    distance = $0.camera.distance
}

然后您可以在创建新的

distance
时使用
MapCamera

© www.soinside.com 2019 - 2024. All rights reserved.