首页 > 解决方案 > SwiftUI:如何在 MapKit 中自定义地理区域的位置?

问题描述

在我的 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中心区域。那么如何改变位置呢?抱歉,我没有找到任何有用的资源。

标签: swiftswiftuimapkit

解决方案


你可以尝试这样的事情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))
        }
    }
}

推荐阅读