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 WidgetKit 占位符中自定义占位符外观?
如何在 SwiftUI MapKit 的 updateUIView 中添加“.setRegion”?