MapKit渲染问题

时间:2017-06-05 08:59:11

标签: swift mkmapview polyline renderer

所以我有一个应用程序根据用户的速度在地图上绘制折线,但我有一些问题。

首先,有时大量的线条是一种颜色,即使速度变化也应该改变。

其次,如果用户移动地图或缩放,则整行变为红色。

最后,我得到这个奇怪的点,看起来它与渲染有关吗? http://imgur.com/a/o5AKf

编程很新,所以它可能非常明显!

mapView:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    if overlay is MKPolyline {
        polylineRenderer = MKPolylineRenderer(overlay: overlay)
        polylineRenderer.lineWidth = 5

        if currentMPH >= 0 && currentMPH <= 9 {
            polylineRenderer.strokeColor = UIColor(red: 1.00, green: 0.12, blue: 0.00, alpha: 1.0)
        }
        if currentMPH >= 10 && currentMPH <= 29 {
            polylineRenderer.strokeColor = UIColor(red: 1.00, green: 0.67, blue: 0.00, alpha: 1.0)
        }
        if currentMPH >= 30 && currentMPH <= 49 {
            polylineRenderer.strokeColor = UIColor(red: 0.03, green: 1.00, blue: 0.01, alpha: 1.0)
        }
        return polylineRenderer
    }
    return MKPolylineRenderer()
}

1 个答案:

答案 0 :(得分:0)

您必须创建MKPolylineRenderer的子类

class MyPolyline: MKPolylineRenderer {
    override func applyStrokeProperties(to context: CGContext, 
atZoomScale zoomScale: MKZoomScale) {
        super.applyStrokeProperties(to: context, atZoomScale: 
zoomScale)
        if let ctx = UIGraphicsGetCurrentContext() {
            ctx.setLineWidth(self.lineWidth)
        }
    }
}

然后在rendererFor MapKit委托中使用它:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        let renderer = MyPolyline(overlay: overlay)
        renderer.strokeColor = UIColor.black
        renderer.lineWidth = 3
        return renderer
}