我正在尝试将一个MapAnnotation项目添加到我的Map()视图中MapKit。
如果您在文本字段中手动添加坐标,则一切正常,但我找不到任何通过点击地图来添加坐标的方法。
我在互联网上阅读了很多内容,但没有找到任何有关onTap()地图事件处理的信息。
这是我到目前为止的地图视图的样子:
struct MyMap : View {
@State private var myRegion:MKCoordinateRegion = {
var newRegion = MKCoordinateRegion()
newRegion.center.latitude = 53.7576508
newRegion.center.longitude = -11.1811597
newRegion.span.latitudeDelta = 0.1
newRegion.span.longitudeDelta = 0.1
return newRegion
}()
@State private var annotationItems : [Annotation] = [
Annotation(name: "Pin1", description: "myDescription", coordinate: CLLocationCoordinate2D(latitude: 123.7576508, longitude: -7.2373215))
]
var body: some View {
ZStack {
Map(coordinateRegion: self.$myRegion, interactionModes: .all, annotationItems: annotationItems){ item in
MapAnnotation(coordinate: item.coordinate){
PinView(pin: item)
}
}
.edgesIgnoringSafeArea(.all)
}
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以获取用户在地图上点击的位置的坐标吗?
Jam*_*mey 10
iOS 17 现在有一个用于 SwiftUI 地图的 MapReader。你可以像这样包装 Map:
struct ContentView: View {
var body: some View {
MapReader { reader in
Map()
.onTapGesture(perform: { screenCoord in
let pinLocation = reader.convert(screenCoord, from: .local)
print(pinLocation)
})
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以提取触摸的纬度/经度。
您可以做的是将点击手势识别器添加到地图,然后将触摸点转换为识别器处理程序中的坐标:
@objc func tapMapAction(recognizer: UITapGestureRecognizer) {
let touch = recognizer.location(in: mapView)
let coord = mapView.convert(touch, toCoordinateFrom: mapView)
let annot = MKPointAnnotation()
annot.coordinate = coord
mapView.addAnnotation(annot)
}
Run Code Online (Sandbox Code Playgroud)
应某人要求,我已取消删除此答案;另外,考虑到 SwiftUI 中没有公认的答案,并且 UIKit 仍然是当今生产应用程序的主导框架。
| 归档时间: |
|
| 查看次数: |
3777 次 |
| 最近记录: |