2012-05-03 11 views
5

Tengo una anotación personalizada que establece su imagen en función del tipo de la anotación mediante el método delegar viewForAnnotation. Solo estoy usando 1 anotación que representa un automóvil en movimiento y quiero cambiar la imagen para cuando se detecte que el automóvil se está moviendo y parado. ¿Cómo podría hacer esto además de eliminar mi anotación y volver a agregarla, lo que causa un parpadeo?cambiar la imagen de anotación después de su creación

Respuesta

10

Siempre que se detecta que el estado del coche ha cambiado, recupere la opinión actual de la anotación utilizando el MKMapViewejemplo método viewForAnnotation:. Esto no es lo mismo que el mapView:viewForAnnotation:delegado método.

Después de obtener la vista actual para la anotación, puede modificar sus propiedades, incluyendo image.

También asegúrese de que el método delegado mapView:viewForAnnotation: tenga la misma condición exacta para establecer image en función del estado de la anotación del automóvil. Es posible que desee colocar la lógica en un método común llamado desde ambos lugares (donde el estado cambia y el método delegado) para que el código no se duplique.

Por ejemplo, cuando los cambios de estado, es posible que tenga:

//carAnnotation is your id<MKAnnotation> object 
MKAnnotationView *av = [mapView viewForAnnotation:carAnnotation]; 
if (carAnnotation.isMoving) 
    av.image = [UIImage imageNamed:@"moving.png"]; 
else 
    av.image = [UIImage imageNamed:@"stopped.png"]; 

El if declaración (o lo que sea la lógica tiene que establecer image) es la parte que debe ser también en el método viewForAnnotation delegado.

+0

No tengo idea de por qué esto no ha tenido un voto previo ... gran respuesta – Sean

Cuestiones relacionadas