【问题标题】:SwiftUI: How can i customize the position of a geographic region in MapKit?SwiftUI:如何在 MapKit 中自定义地理区域的位置?
【发布时间】:2021-09-15 14:15:00
【问题描述】:

在我的 SwiftUI 应用程序中,我有一个这样的 MapView:

struct MapView: View {
    var coordinate: CLLocationCoordinate2D
    @State private var region = MKCoordinateRegion()
    
    var body: some View {
        Map(coordinateRegion: $region)
            .onAppear {
                setRegion(coordinate)
            }
    }
    
    private func setRegion(_ coordinate: CLLocationCoordinate2D) {
        region = MKCoordinateRegion(
            center: coordinate,
            span: MKCoordinateSpan(latitudeDelta: 0.2, longitudeDelta: 0.2)
        )
    }
}

我正在像这样使用这个 MapView:

MapView(coordinate: coordinate)
   .frame(height: 300)

我想改变地图的位置,所以伦敦不再居中,如下图所示:

但是我该怎么做呢?函数MKCoordinateRegion 以我提供的区域为中心。那么如何改变位置呢?抱歉,我没有找到任何有用的资源。

【问题讨论】:

    标签: swift swiftui mapkit


    【解决方案1】:

    你可以用withAnimation 尝试这样的事情,对我有用: (因为coordinateRegion是视图的动画参数)

    import Foundation
    import SwiftUI
    import MapKit
    import CoreLocation
    
    
    struct ContentView: View {
        @State var london = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.1167)
        
        var body: some View {
            MapView(coordinate: london)
        }
    }
    
    struct MapView: View {
        @State var coordinate: CLLocationCoordinate2D
        @State var region = MKCoordinateRegion()
        
        var body: some View {
            VStack {
                Button(action: {
                    coordinate = CLLocationCoordinate2D(latitude: 51.56, longitude: -0.1167)
                    setRegion(coordinate)
                }) {
                    Text("Change map centre")
                }
                Map(coordinateRegion: $region)
            }
            .onAppear {
                setRegion(coordinate)
            }
        }
        
        private func setRegion(_ coordinate: CLLocationCoordinate2D) {
            withAnimation {
                region.center = coordinate
                region.span = MKCoordinateSpan(latitudeDelta: 0.2, longitudeDelta: 0.2)
        // or
        //      region = MKCoordinateRegion(center: coordinate, span: MKCoordinateSpan(latitudeDelta: 0.2, longitudeDelta: 0.2))
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      相关资源
      最近更新 更多