SwiftUI 地图扩展添加 MKPolylineRenderer

Posted

技术标签:

【中文标题】SwiftUI 地图扩展添加 MKPolylineRenderer【英文标题】:SwiftUI Map extension add MKPolylineRenderer 【发布时间】:2020-12-30 23:33:04 【问题描述】:

我找到了这篇文章,我正在尝试向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 可以完美运行。

【问题讨论】:

【参考方案1】:

我认为使用 UIViewRepresentable 是目前唯一可行的解​​决方案,因为 SwiftUI 地图尚不支持覆盖和其他可在 UIKit 地图中使用的功能。

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

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

【讨论】:

以上是关于SwiftUI 地图扩展添加 MKPolylineRenderer的主要内容,如果未能解决你的问题,请参考以下文章

使用 MKPolyline 在地图上绘制用户路线

MKPolyLine,检测线条何时重叠并相应改变颜色

添加 MKPolyLine NSInvalidArgumentException

MapKit:添加 MKPolyline 隐藏 MKTileOverlay

在 MapView 上绘制 MKPolyline 显示两个位置之间的直线

如何使用 MapKit (SwiftUI) 将工具提示添加到地图注释以在地图上显示位置名称