Swift MapKit 多条不同颜色的折线

问题描述 投票:0回答:1

我试图在 Swift 的 MapKit 中为每条折线设置不同的颜色。 这是一个简化的例子。

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        if let overlay_ = overlay as? MKPolyline {
            let renderer = MKPolylineRenderer(overlay: overlay)
            if overlay_.title == "2" {
                renderer.strokeColor = UIColor.red
            } else {
                renderer.strokeColor = UIColor.blue
            }
            renderer.lineWidth = 5
            return renderer
        } else {
            return MKOverlayRenderer()
        }
    }

我在地图中有多条折线,我在其中设置了不同的 overlay.title 来区分颜色。

不幸的是,它总是采用最后设置的颜色并将其应用于所有折线。

在下面的示例中,我有 3 条标题为“0”、“1”和“2”的多段线。结果是所有多段线的红色描边颜色。

有人知道如何解决这个问题吗?您需要更多代码吗?

添加标题的代码:

  func showAllRoutes(map: MKMapView, route: Routes) {
    var coordinates: [CLLocationCoordinate2D] = []
    
    
    if dm.show_all_routes {
        for x in route.routes.indices {
            for y in route.routes[x].route_numbers {
                coordinates.append(CLLocationCoordinate2D(latitude: dm.alle_staende.locations[y].latitude, longitude:dm.alle_staende.locations[y].longitude))
            }
            
            let overlay = MKPolyline(coordinates: coordinates, count: coordinates.count)
            overlay.subtitle = "Route"
            overlay.title = "\(x)"
            
            map.addOverlay(overlay)
            
        }
        
    }
}
swift mapkit polyline
1个回答
0
投票

我相信你的 If 语句没有被执行。你的代码似乎是正确的。我曾经做过你想做的事,结果如你所愿

我的代码:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if overlay is MKPolyline {
            let renderer = MKPolylineRenderer(overlay: overlay)
            renderer.strokeColor = .random()
            renderer.lineWidth = 0
            return renderer
            
        } else if overlay is MKPolygon {
            let renderer = MKPolygonRenderer(polygon: overlay as! MKPolygon)
            renderer.strokeColor = .random()
            
            renderer.fillColor = renderer.strokeColor?.withAlphaComponent(0.1)
            renderer.lineWidth = 2
            return renderer
        }
        
        return MKOverlayRenderer() 
}

你最好用这个 if 语句检查你的代码

if overlay_.title == "2" {

   renderer.strokeColor = UIColor.red

} else {

   renderer.strokeColor = UIColor.blue
}

要查看您的代码是否正确,请设置一个随机颜色来测试它。

© www.soinside.com 2019 - 2024. All rights reserved.