2012-06-02 16 views

Respuesta

81

Actualización:

Cuando probé con el iOS SDK 9 la anotación usuario ya no se elimina. Usted puede simplemente utilizar

mapView.removeAnnotations(mapView.annotations) 

respuesta histórica (para aplicaciones que se ejecutan en iOS antes de IOS 9):

Prueba esto:

NSMutableArray * annotationsToRemove = [ mapView.annotations mutableCopy ] ; 
[ annotationsToRemove removeObject:mapView.userLocation ] ; 
[ mapView removeAnnotations:annotationsToRemove ] ; 

EDIT: versión Swift

let annotationsToRemove = mapView.annotations.filter { $0 !== mapView.userLocation } 
mapView.removeAnnotations(annotationsToRemove) 
+1

¡Gracias! Esto es exactamente lo que necesitaba! –

+0

Gracias ..... Buddy – user968597

+0

Gracias también de mí :) –

3

Si su ubicación del usuario es una especie de clase de MKUserLocation, utilice isKindOfClass para evitar la eliminación de la ubicación del usuario de anotación.

if (![annotation isKindOfClass:[MKUserLocation class]]) { 

} 

cosa que se pueda establecer un indicador para reconocer el tipo de anotaciones en – mapView:viewForAnnotation:.

+0

Gracias! Recordaré esto –

-1

Hola, intente esto, tengo la solución ión de este código:

NSMutableArray*listRemoveAnnotations = [[NSMutableArray alloc] init]; 
[Mapview removeAnnotations:listRemoveAnnotations]; 

[listRemoveAnnotations release]; 
+0

esto no responde la pregunta. De hecho, este código como sin efecto - 'listRemoveAnnotations' está vacío cuando se llama a' -removeAnimations'. – nielsbot

19

Para borrar todas las anotaciones del mapa:

[self.mapView removeAnnotations:[self.mapView annotations]]; 

Para eliminar anotaciones específicas de Mapview

for (id <MKAnnotation> annotation in self.mapView.annotations) 
{ 
    if (![annotation isKindOfClass:[MKUserLocation class]]) 
    { 
       [self.mapView removeAnnotation:annotation]; 
    } 

} 

Hope esto puede ayudarle.

+1

Esta respuesta es mucho más concisa que la aceptada. – shapeare

6

para SWIFT puede simplemente usar una sola línea:

mapView.removeAnnotations(mapView.annotations) 

Edit: Como nielsbot mencionó que también eliminará la anotación de la ubicación del usuario, a menos que lo haya configurado de esta manera:

mapView.showsUserLocation = true 
+0

esto elimina todas las anotaciones, que no es lo que OP quería. – nielsbot

+0

Gracias, Acabo de actualizar mi respuesta. – raspi

+0

No creas que tampoco funciona. ¿Lo intentaste? – nielsbot

0

¿Qué tal un filtro NSPredicate?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"className != %@", NSStringFromClass(MKUserLocation.class)]; 
NSArray *nonUserAnnotations = [self.mapView.annotations filteredArrayUsingPredicate:predicate]; 
[self.mapView removeAnnotations:nonUserAnnotations]; 

La vida es siempre mejor con NSPredicate filtrar

Cuestiones relacionadas