我试图在 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)
}
}
}
我相信你的 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
}
要查看您的代码是否正确,请设置一个随机颜色来测试它。