Swiftui 使用Pin将坐标传递到地图视图
我正在尝试在地图上显示地图pin。输入交易后,详细信息将与位置坐标一起保存。在交易条目列表中,用户可以单击条目以获取更多详细信息,包括显示交易位置的小地图 根据Asperi的建议,似乎我需要声明一个可识别的结构,以便使用地图pin 在DetailView中,纬度和经度将在传输到MapView之前复制到坐标参数Swiftui 使用Pin将坐标传递到地图视图,swiftui,ios14,Swiftui,Ios14,我正在尝试在地图上显示地图pin。输入交易后,详细信息将与位置坐标一起保存。在交易条目列表中,用户可以单击条目以获取更多详细信息,包括显示交易位置的小地图 根据Asperi的建议,似乎我需要声明一个可识别的结构,以便使用地图pin 在DetailView中,纬度和经度将在传输到MapView之前复制到坐标参数 struct DetailView: View { var coordinate: CLLocationCoordinate2D { CLLoc
struct DetailView: View {
var coordinate: CLLocationCoordinate2D {
CLLocationCoordinate2D(
latitude: item.entryLat,
longitude: item.entryLong)
}
var body: some View {
VStack {
MapView(coordinate: coordinate)
.ignoresSafeArea(edges: .all)
.frame(height: 400)
.padding(.vertical, 10)
}
}
}
MapView是我遇到麻烦的地方。我不确定如何输入区域和标记(xxxxx)的坐标。将`坐标复制到@State区域和标记会产生错误“传递给不带参数的调用的参数”
听起来对于您的应用程序来说,将区域声明为常量是可行的。代码如下所示:
struct Marker: Identifiable {
let id = UUID()
var location: MapMarker
}
struct MapView: View {
var coordinate: CLLocationCoordinate2D
var body: some View {
Map(coordinateRegion: .constant(MKCoordinateRegion(center: coordinate,
span: MKCoordinateSpan(latitudeDelta: 0.5, longitudeDelta: 0.5))),
showsUserLocation: true,
annotationItems: [Marker(location: MapMarker(coordinate: coordinate))]) { marker in
marker.location
}.edgesIgnoringSafeArea(.all)
}
}
如果仍希望将其用作@State变量,则可以使用自定义init
来设置该值:
struct MapView: View {
var coordinate: CLLocationCoordinate2D
@State private var region : MKCoordinateRegion
init(coordinate : CLLocationCoordinate2D) {
self.coordinate = coordinate
_region = State(initialValue: MKCoordinateRegion(center: coordinate,
span: MKCoordinateSpan(latitudeDelta: 0.5, longitudeDelta: 0.5)))
}
var body: some View {
Map(coordinateRegion: $region,
showsUserLocation: true,
annotationItems: [Marker(location: MapMarker(coordinate: coordinate))]) { marker in
marker.location
}
.edgesIgnoringSafeArea(.all)
}
}
最后,我将内联定义markers数组,但您可以将其拆分为一个计算属性:
var markers : [Marker] {
[Marker(location: MapMarker(coordinate: coordinate))]
}
var body: some View {
Map(coordinateRegion: $region,
showsUserLocation: true,
annotationItems: markers) { marker in
marker.location
}
.edgesIgnoringSafeArea(.all)
}
感谢jnpdx,前两个选项非常有效!
var markers : [Marker] {
[Marker(location: MapMarker(coordinate: coordinate))]
}
var body: some View {
Map(coordinateRegion: $region,
showsUserLocation: true,
annotationItems: markers) { marker in
marker.location
}
.edgesIgnoringSafeArea(.all)
}