MapKit - 更改MKPolyline的颜色/笔触

时间:2015-07-22 16:15:35

标签: ios swift mapkit 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
 }

除了移除叠加层并将其添加回去之外,还有一种更好的方法 你知道其他任何方式吗?

1 个答案:

答案 0 :(得分:0)

我不认为这是最佳解决方案,但我找到了一种方法,可以在不删除/添加叠加层的情况下执行此操作。

我在let polyLineRenderer = MKPolylineRenderer(overlay: polyLine)上以这种方式引用randomMethod()我可以更改我需要的属性(stroke,lineWidth),然后在该折线的渲染器上执行setNeedsDisplay()

这比其他方法更差吗? 它可能是..我必须添加一个结构来存储渲染器,但这是我找到的唯一方法......