首页 > 解决方案 > SwiftUI 地图扩展添加 MKPolylineRenderer

问题描述

我找到了这篇文章,我正在尝试将功能添加到Map.

我已经创建了这个扩展,我想在地图上显示一个覆盖。目前它没有被显示,我认为这是因为我没有指定MKPolylineRenderer

如何在此扩展中指定渲染器?

extension Map {
    func mapStyle(_ mapType: MKMapType, showScale: Bool = true, showTraffic: Bool = false) -> some View {
        let map = MKMapView.appearance()
        map.mapType = mapType
        map.showsScale = showScale
        map.showsTraffic = showTraffic
        return self
    }

    func addAnnotations(_ annotations: [MKAnnotation]) -> some View {
        MKMapView.appearance().addAnnotations(annotations)
        return self
    }
    
    func addOverlay(_ overlay: MKOverlay) -> some View {
        MKMapView.appearance().addOverlay(overlay)
        return self
    }
    
}

看法

Map(coordinateRegion: .constant(MKCoordinateRegion(route.polyline.boundingMapRect)))
.addOverlay(route.polyline)

我知道我可以使用UIViewRepresentable并且我正在使用它,但问题是它对触摸和四处移动反应不佳。它卡住了,滚动很困难。有了Map它就可以完美运行。

标签: iosswiftswiftuimapkitswift5

解决方案


我认为使用 UIViewRepresentable 是目前唯一可行的解​​决方案,因为 SwiftUI Map 尚不支持 Overlays 和您可以在 UIKit Maps 中使用的其他功能。

如何阅读文档 ( https://developer.apple.com/documentation/mapkit/map ) SwiftUI 地图仅在特定位置显示区域和注释。

我认为将来会有更新,现在我认为这个解决方案是可以接受的:SwiftUI Map Overlays without UIViewRepresentable


推荐阅读