MapKit - 更改 MKPolyline 的 Color/Stroke
MapKit - Change the Color/Stroke of a MKPolyline
我已经使用以下代码向我的地图添加了一个叠加层:
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
if overlay.isKindOfClass(MKPolyline) {
// draw the track
let polyLine = overlay as! MKPolyline
let polyLineRenderer = MKPolylineRenderer(overlay: polyLine)
polyLineRenderer.strokeColor = UIColor.blueColor()
polyLineRenderer.lineWidth = 2.0
return polyLineRenderer
}
return nil
}
现在我想更改该折线的颜色或线宽。
我发现这样做的唯一方法是:
func randomMethod()
{
...// find aPolyline
self.myOverlay = aPolyLine
self.map.removeOverlay(self.myOverlay)
self.map.addOverlay(self.myOverlay)
}
在 mapView renderForOverLay 方法中添加了这个:
if (polyLine == self.myOverlay)
{
polyLineRenderer.strokeColor = UIColor.redColor()
polyLineRenderer.lineWidth = 5.0
}else{
polyLineRenderer.strokeColor = UIColor.blueColor()
polyLineRenderer.lineWidth = 2.0
}
一定有比移除叠加层再重新添加更好的方法。
你知道其他方法吗?
我认为这不是最好的解决方案,但我找到了一种无需 removing/adding 叠加层的方法。
我在 randomMethod()
上以这种方式保留对 let polyLineRenderer = MKPolylineRenderer(overlay: polyLine)
的引用我可以更改我需要的属性(笔划、线宽),然后在渲染器上执行 setNeedsDisplay()
那条折线。
这比其他方法更糟糕吗?
可能是……我必须添加一个结构来存储渲染器,但这是我发现的唯一方法……
我已经使用以下代码向我的地图添加了一个叠加层:
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
if overlay.isKindOfClass(MKPolyline) {
// draw the track
let polyLine = overlay as! MKPolyline
let polyLineRenderer = MKPolylineRenderer(overlay: polyLine)
polyLineRenderer.strokeColor = UIColor.blueColor()
polyLineRenderer.lineWidth = 2.0
return polyLineRenderer
}
return nil
}
现在我想更改该折线的颜色或线宽。
我发现这样做的唯一方法是:
func randomMethod()
{
...// find aPolyline
self.myOverlay = aPolyLine
self.map.removeOverlay(self.myOverlay)
self.map.addOverlay(self.myOverlay)
}
在 mapView renderForOverLay 方法中添加了这个:
if (polyLine == self.myOverlay)
{
polyLineRenderer.strokeColor = UIColor.redColor()
polyLineRenderer.lineWidth = 5.0
}else{
polyLineRenderer.strokeColor = UIColor.blueColor()
polyLineRenderer.lineWidth = 2.0
}
一定有比移除叠加层再重新添加更好的方法。
你知道其他方法吗?
我认为这不是最好的解决方案,但我找到了一种无需 removing/adding 叠加层的方法。
我在 randomMethod()
上以这种方式保留对 let polyLineRenderer = MKPolylineRenderer(overlay: polyLine)
的引用我可以更改我需要的属性(笔划、线宽),然后在渲染器上执行 setNeedsDisplay()
那条折线。
这比其他方法更糟糕吗? 可能是……我必须添加一个结构来存储渲染器,但这是我发现的唯一方法……