2015-07-22 1 views
1

je l'ai déjà ajouté une superposition à ma carte avec le code follwing:MapKit - Changer la couleur/Stroke d'un MKPolyline

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! { 
    if overlay.isKindOfClass(MKPolyline) { 
     // draw the track 

     let polyLine = overlay as! MKPolyline 
     let polyLineRenderer = MKPolylineRenderer(overlay: polyLine) 
     polyLineRenderer.strokeColor = UIColor.blueColor() 
     polyLineRenderer.lineWidth = 2.0 
     return polyLineRenderer 
    } 

    return nil 
} 

Maintenant, je veux changer la largeur de la couleur ou de la ligne de cette polyligne.
La seule façon que je trouve à faire est la suivante: la méthode Mapview renderForOverLay

func randomMethod() 
{ 
    ...// find aPolyline 
    self.myOverlay = aPolyLine 
    self.map.removeOverlay(self.myOverlay) 
    self.map.addOverlay(self.myOverlay) 
} 

ajouté ceci:

if (polyLine == self.myOverlay) 
{ 
    polyLineRenderer.strokeColor = UIColor.redColor() 
    polyLineRenderer.lineWidth = 5.0 
}else{ 
    polyLineRenderer.strokeColor = UIColor.blueColor() 
    polyLineRenderer.lineWidth = 2.0 
} 

Il doit y avoir une meilleure façon que d'enlever la superposition et l'ajouter de nouveau.
Connaissez-vous un autre moyen?

Répondre

0

Je ne pense pas que ce soit la meilleure solution, mais j'ai trouvé un moyen de le faire sans enlever/ajouter le recouvrement.

Je garde une référence à la let polyLineRenderer = MKPolylineRenderer(overlay: polyLine) cette façon sur mon randomMethod() je peux modifier les propriétés dont j'ai besoin (temps, LineWidth) et puis juste exécuter setNeedsDisplay() sur le moteur de rendu pour cette polyligne.

Est-ce pire que l'autre approche? Il peut être .. Je dois ajouter une structure pour stocker les moteurs de rendu, mais est le seul moyen que j'ai trouvé ...