swift - 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
中心区域。那么如何改变位置呢?抱歉,我没有找到任何有用的资源。
解决方案
你可以尝试这样的事情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))
}
}
}
推荐阅读
- neo4j - 将一个节点中的键与具有键列表的另一个节点匹配
- python - 检查列表中的相等值并将它们设置为 0
- c - C 函数,它接收一个结构,并使其在函数外部发生变化,即使该结构没有作为指针发送
- php - PHP 联系表单将使用代码进入页面
- github - 重命名 Github 存储库
- reactjs - React Redux Firebase - onAuthStateChanged 延迟阻止使用生命周期方法
- python - python for循环中追加函数的机制
- jenkins - 在共享库中重构 jenkins post 块
- r - str_detect,使用特定模式验证电话号码
- asp.net-web-api - 不同类型的WebApi2 FromBody RequestMessage