2017-06-05 248 views
0

所以我有一個應用程序根據用戶的速度在地圖上繪製折線,但我遇到了一些問題。MapKit渲染問題

首先,即使給定的速度變化應該是變化的,有時大量的線是一種顏色。其次,如果用戶將地圖移動或縮放,則整條線將變爲紅色。

最後,我得到這個奇怪的點,看起來像是與渲染有關嗎? 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

你必須創建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 
}