2011-06-08 15 views
6

Ho alcuni MKOverlays (in realtà sono MKPolygons) che vengono caricati non appena viene visualizzata la mappa. Mi piacerebbe cambiare il loro colore in modo dinamico. L'unico modo che posso vedere di fare questo è rimuovere l'overlay, quindi aggiungerlo di nuovo con il nuovo colore. C'è un modo migliore per farlo sull'overlay esistente?Cambiare colore di un MKOverlay che è già stato aggiunto a una mappaview

io sono nuovo di zecca in Objective-C/Xcode/ios ... quindi per favore essere gentile :)

risposta

4

E 'importante ricordare che gran parte MapKit ha diversi oggetti (MKPolygon, MKCircle, MKShape) per tenere i dati relativi al disegno di una vista (MKPolygonView, MKCircleView, MKOverlayView, ecc.) In molti casi si desidera ottenere un riferimento all'oggetto vista in modo da poter quindi impostare il colore di sfondo. cioè

MKOverlayView *anOverlay; //You need to set this view to the object you are interested in 
anOverlay.backgroundColor = [UIColor redColor]; 
[anOverlay setNeedsDisplay]; 

Se l'oggetto è un MKPolygon, è opportuno determinare il MKPolygonView è in fase di elaborazione in un quindi impostare la proprietà fillColor e ridisegnare l'oggetto chiamando setNeedsDisplay:

MKPolygonView *theView; 
theView.fillColor = [UIColor redColor]; 
[theView setNeedsDisplay]; 
+0

Che ha lavorato grande! Grazie Chip! e rimanete sintonizzati perché ho un sacco di domande di noob di ios che verranno in futuro :) – AdamBT

0

tuo MapView ha un metodo per ottenere l'oggetto di rendering per un dato overlay. È quindi possibile utilizzare il renderer per modificare il colore della sovrapposizione.

if let renderer = mapView.rendererForOverlay(overlay) as? MKPolygonRenderer { 
    renderer.fillColor = UIColor.redColor() 
} 

Lascia il cast opzionale per MKPolygonRenderer se non siete in cerca di un overlay MKPolygon.

(mi rendo conto che questa è una domanda un po 'vecchia, ma ho appena imbattuto in esso e trovato la mia soluzione)

Problemi correlati