tutorial google current annotation ios xcode mkmapview mkannotation userlocation

ios - google - swift 4 get current location



¿Cómo elimino todas las anotaciones de MKMapView excepto la anotación de ubicación del usuario? (6)

¿Qué NSPredicate filtro NSPredicate ?

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

La vida siempre es mejor con el filtro NSPredicate

Utilizo removeAnnotations para eliminar mis anotaciones de mapView pero igual mapView la ubicación del usuario ann. ¿Cómo puedo evitar esto o cómo hacer que el usuario vuelva a verlo?

NSArray *annotationsOnMap = mapView.annotations; [mapView removeAnnotations:annotationsOnMap];


Actualizar:

Cuando probé con el iOS 9 SDK, la anotación del usuario ya no se elimina. Puedes simplemente usar

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 ] ;

EDITAR: versión Swift

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


Hola, intenté esto, obtuve la solución de este código:

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


Para Swift puedes simplemente usar un trazador de líneas:

mapView.removeAnnotations(mapView.annotations)

Editar: como Nielsbot mencionó, también eliminará la anotación de ubicación del usuario a menos que la haya configurado así:

mapView.showsUserLocation = true


Para borrar todas las anotaciones del mapa:

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

Para eliminar anotaciones especificadas de Mapview

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

Espero que esto te pueda ayudar.


Si su ubicación de usuario es una clase de clase de MKUserLocation , use isKindOfClass para evitar eliminar la anotación de ubicación del usuario.

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

De lo contrario, puede establecer una bandera para reconocer el tipo de sus anotaciones en – mapView:viewForAnnotation: