Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(SwiftUI)添加了MKOverlays(从GeoJSON解析),但没有显示在屏幕上,我是否遗漏了什么?_Swift_Mapkit_Swiftui_Mkoverlay - Fatal编程技术网

(SwiftUI)添加了MKOverlays(从GeoJSON解析),但没有显示在屏幕上,我是否遗漏了什么?

(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)函数中放置一个断点可以显

我试图在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中,我得到了成功的解析,但只有一个空映射。我有什么遗漏吗

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")
查看