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 に答える