2017-06-05 4 views
0

J'ai donc une application qui dessine une polyligne sur la carte en fonction de la vitesse de l'utilisateur, mais j'ai quelques problèmes avec celle-ci. Premièrement, parfois une grande partie de la ligne est d'une couleur même si, compte tenu des variations de vitesse, elle devrait changer. Deuxièmement, si l'utilisateur déplace la carte ou effectue un zoom, la ligne entière passe au rouge.Problèmes de rendu MapKit

Et enfin, je reçois ce point bizarre qui ressemble à quelque chose à voir avec le rendu? Assez nouveau pour la programmation, il pourrait être vraiment évident!

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() 
} 

Répondre

0

Vous devez créer une sous-classe de 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) 
     } 
    } 
} 

Ensuite, utilisez dans votre rendererFor délégué MapKit:

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