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: