7

这是我绘制第一条线的代码,另一条线用另一种颜色我该怎么办??????

 func mapView(mapView : MKMapView! , rendererForOverlay overlay: MKOverlay!) ->MKOverlayRenderer! {

    if overlay is MKPolyline {

        var polyLineRenderer = MKPolylineRenderer(overlay: overlay)
        polyLineRenderer.strokeColor = UIColor.blackColor()
        polyLineRenderer.lineWidth = 10

        return polyLineRenderer
    }
    return nil
  }
4

3 回答 3

8

最后我找到了方法:

在我放的班级的顶部

var toGo    : MKPolyline?
var toCome  : MKPolyline?

然后在视图中加载:

                    var polyLineGoes = MKPolyline(coordinates: &coordinateGoes, count: coordinateGoes.count)
                    toGo = polyLineGoes
                    mapView.addOverlay(polyLineGoes)


                    var polyLineComes = MKPolyline(coordinates: &coordinateComes, count: coordinateComes.count)
                    toCome = polyLineComes
                    mapView.addOverlay(polyLineComes)

在课程结束时:

func mapView(mapView : MKMapView! , rendererForOverlay overlay: MKOverlay!) ->MKOverlayRenderer! {

    if overlay is MKPolyline {
        if ( toGo  != nil) && (toCome != nil ) {
            if overlay as? MKPolyline  == toGo {
                var polyLineRenderer = MKPolylineRenderer(overlay: overlay)
                polyLineRenderer.strokeColor = UIColor.redColor()
                polyLineRenderer.lineWidth = 3

                return polyLineRenderer
            } else if overlay as? MKPolyline  == toCome {
                print(overlay.description)
                var polyLineRenderer = MKPolylineRenderer(overlay: overlay)
                polyLineRenderer.strokeColor = UIColor.blueColor()
                polyLineRenderer.lineWidth = 3

                return polyLineRenderer
            }
        }
    }
    return nil

}
于 2015-01-20T22:58:24.463 回答
2

我遇到了同样的问题,但我只是找到了另一种方法来解决它。

在 mapView 中,代码将是:

    func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer!{
        if overlay is MKPolyline {
            var polylineRenderer = MKPolylineRenderer(overlay: overlay)
            polylineRenderer.strokeColor = variables.lineColor
            polylineRenderer.lineWidth = 4
            return polylineRenderer
        }
        return nil
    }

我只有一个名为变量的结构,它包含变量 lineColor。另外,我还有另一个 CONSTANT 结构,它有一些 CONSTANT 可以使 mapView 类中的代码更具可读性。这两个结构中的代码将是:

    struct CONSTANT {
        static let greenColor = UIColor.greenColor().colorWithAlphaComponent(0.5)
        static let blueColor = UIColor.blueColor().colorWithAlphaComponent(0.5)
        static let redColor = UIColor.redColor().colorWithAlphaComponent(0.5)
    }
    
    struct variables {
        // let the default lineColor be green
        static var lineColor = CONSTANT.greenColor
    }

有了这些,我只需将 variables.lineColor 更改为 CONSTANT 结构中的颜色。例如,

lineColor = CONSTANT.greenColor
mapView.addOverlay(myPolyLine, level: MKOverlayLevel.AboveRoads)

lineColor = CONSTANT.blueColor
mapView.addOverlay(myPolyLine, level: MKOverlayLevel.AboveRoads)

lineColor = CONSTANT.redColor
mapView.addOverlay(myPolyLine, level: MKOverlayLevel.AboveRoads)

第一次在这里发帖:D

于 2015-05-24T06:34:30.443 回答
0

我又找到了另一种方法。

首先,我们需要扩展MKPolyline

extension MKPolyline {
    struct ColorHolder {
        static var _color: UIColor?
    }
    var color: UIColor? {
        get {
            return ColorHolder._color
        }
        set(newValue) {
            ColorHolder._color = newValue
        }
    }
}

viewDidLoad中,我们现在可以为每条折线分配颜色:

var polyline1 = MKPolyline(coordinates: coordinates1, count: coordinates1.count)
polyline1.color = UIColor(.red)
mapView.addOverlay(polyline1)

var polyline2 = MKPolyline(coordinates: coordinates2, count: coordinates2.count)
polyline2.color = UIColor(.green)
mapView.addOverlay(polyline2)

最后,我们有我们的mapView-function:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    if let overlay_ = overlay as? MKPolyline {
        let renderer = MKPolylineRenderer(overlay: overlay)
        renderer.strokeColor = overlay_.color
        return renderer
    } else {
        return MKOverlayRenderer()
    }
}
于 2021-05-09T13:08:36.950 回答