1

我已经使用以下代码在我的地图中添加了一个叠加层:

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
 }

必须有比移除覆盖层并重新添加它更好的方法。
你知道其他方法吗?

4

1 回答 1

0

我不认为这是最好的解决方案,但我找到了一种无需删除/添加覆盖的方法。

我保留了对let polyLineRenderer = MKPolylineRenderer(overlay: polyLine)这种方式的引用,randomMethod()我可以更改我需要的属性(笔划、线宽),然后setNeedsDisplay()在渲染器上执行该折线。

这比其他方法最糟糕吗?可能是……我必须添加一个结构来存储渲染器,但这是我发现的唯一方法……

于 2015-07-22T17:32:20.597 回答