SwiftUI:如何在 MapKit 中自定义地理区域的位置?

Posted

技术标签:

【中文标题】SwiftUI:如何在 MapKit 中自定义地理区域的位置?【英文标题】:SwiftUI: How can i customize the position of a geographic region in 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 以我提供的区域为中心。那么如何改变位置呢?抱歉,我没有找到任何有用的资源。

【问题讨论】:

【参考方案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))
        
    

【讨论】:

以上是关于SwiftUI:如何在 MapKit 中自定义地理区域的位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中自定义 Slider 蓝线?

如何在 SwiftUI WidgetKit 占位符中自定义占位符外观?

如何在 SwiftUI MapKit 的 updateUIView 中添加“.setRegion”?

Swift:SwiftUI中MapKit的使用体验

SwiftUI MapKit UIViewRepresentable 无法显示警报

如何使用 MapKit (SwiftUI) 将工具提示添加到地图注释以在地图上显示位置名称