(SwiftUI)添加了MKOverlays(从GeoJSON解析),但没有显示在屏幕上,我是否遗漏了什么?
我试图在SwiftUI中显示UIKit/MapKit视图,下面的代码与Apple指南中的GeoJSON呈现/覆盖代码非常相似,但实现了GeoJSON呈现/覆盖代码 我有一个“EventDataSource”类,它(成功地)解析本地文件中的GeoJSON对象,在UIViewRepresentable类中,我加载此数据,并在updateUIView函数中添加覆盖 在mapView(mapView:MKMapView,rendererFor overlay:MKOverlay)函数中放置一个断点可以显示每个多边形都有正确的pointCount值,并且我为坐标添加了一个print()行,它可以在加载视图时成功打印出所有对象的坐标 Xcode不显示错误,构建良好,运行时,MapKit视图将加载,但屏幕上不会显示覆盖 UIKit ViewController中使用的完全相同的mapView(mapView:MKMapView,rendererFor overlay:MKOverlay)函数可以完美地渲染对象。在SwiftUI中,我得到了成功的解析,但只有一个空映射。我有什么遗漏吗(SwiftUI)添加了MKOverlays(从GeoJSON解析),但没有显示在屏幕上,我是否遗漏了什么?,swift,mapkit,swiftui,mkoverlay,Swift,Mapkit,Swiftui,Mkoverlay,我试图在SwiftUI中显示UIKit/MapKit视图,下面的代码与Apple指南中的GeoJSON呈现/覆盖代码非常相似,但实现了GeoJSON呈现/覆盖代码 我有一个“EventDataSource”类,它(成功地)解析本地文件中的GeoJSON对象,在UIViewRepresentable类中,我加载此数据,并在updateUIView函数中添加覆盖 在mapView(mapView:MKMapView,rendererFor overlay:MKOverlay)函数中放置一个断点可以显
import SwiftUI
import MapKit
struct MapView: UIViewRepresentable {
var dataSource: EventDataSource = EventDataSource()
func makeUIView(context: Context) -> MKMapView {
let map = MKMapView()
map.delegate = context.coordinator
return map
}
func updateUIView(_ mapView: MKMapView, context: Context) {
mapView.region = .event
mapView.addOverlays(dataSource.overlays)
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
final class Coordinator: NSObject, MKMapViewDelegate {
var control: MapView
init(_ control: MapView) {
self.control = control
}
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if let polygon = overlay as? MKPolygon {
let renderer = MKPolygonRenderer(polygon: polygon)
renderer.fillColor = UIColor(named: "OverlayFill")
renderer.strokeColor = UIColor(named: "OverlayStroke")
renderer.lineWidth = 1.0
print("\(polygon.coordinate.longitude), \(polygon.coordinate.latitude)") // succesfully prints the coordinate of each object
return renderer
}
else if let multiPolygon = overlay as? MKMultiPolygon {
let renderer = MKMultiPolygonRenderer(multiPolygon: multiPolygon)
renderer.fillColor = UIColor(named: "OverlayFill")
renderer.strokeColor = UIColor(named: "OverlayStroke")
renderer.lineWidth = 1.0
print("\(multiPolygon.coordinate.longitude), \(multiPolygon.coordinate.latitude)") // succesfully prints the coordinate of each object
return renderer
}
return MKOverlayRenderer(overlay: overlay)
}
}
}
我试着把这句话注释掉
mapView.addOverlays(dataSource.overlays)
当这一行不存在时,坐标不会打印到控制台,因此我确信函数正在被调用
任何帮助都将不胜感激,谢谢 如果你试试这个
import SwiftUI
import MapKit
struct MapView: UIViewRepresentable {
var coordinate: CLLocationCoordinate2D
func makeUIView(context: Context) -> MKMapView {
MKMapView(frame: .zero)
}
func updateUIView(_ view: MKMapView, context: Context) {
let span = MKCoordinateSpan(latitudeDelta: 2.0, longitudeDelta: 2.0)
let region = MKCoordinateRegion(center: coordinate, span: span)
view.setRegion(region, animated: true)
}
}
然后在您的视图中添加
MapView(coordinate: "the coordinates")
查看