所以我有一个应用程序根据用户的速度在地图上绘制折线,但我有一些问题。
首先,有时大量的线条是一种颜色,即使速度变化也应该改变。
其次,如果用户移动地图或缩放,则整行变为红色。
最后,我得到这个奇怪的点,看起来它与渲染有关吗? 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()
}
答案 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
}