¿Existe una forma sencilla de eliminar todas las anotaciones en un mapa sin iterar a través de todas las anotaciones mostradas en Objective-c?
fuente
¿Existe una forma sencilla de eliminar todas las anotaciones en un mapa sin iterar a través de todas las anotaciones mostradas en Objective-c?
Si, asi es como
[mapView removeAnnotations:mapView.annotations]
Sin embargo, la línea de código anterior eliminará todas las anotaciones de mapa "PINS" del mapa, incluido el pin de ubicación del usuario "Pin azul". Para eliminar todas las anotaciones del mapa y mantener el marcador de ubicación del usuario en el mapa, hay dos formas posibles de hacerlo
Ejemplo 1, conservar la anotación de ubicación del usuario, eliminar todos los pines, volver a agregar el pin de ubicación del usuario, pero hay una falla con este enfoque, hará que el pin de ubicación del usuario parpadee en el mapa, debido a que se quita el pin y luego se agrega espalda
- (void)removeAllPinsButUserLocation1
{
id userLocation = [mapView userLocation];
[mapView removeAnnotations:[mapView annotations]];
if ( userLocation != nil ) {
[mapView addAnnotation:userLocation]; // will cause user location pin to blink
}
}
Ejemplo 2, personalmente prefiero evitar eliminar el pin de usuario de ubicación en primer lugar,
- (void)removeAllPinsButUserLocation2
{
id userLocation = [mapView userLocation];
NSMutableArray *pins = [[NSMutableArray alloc] initWithArray:[mapView annotations]];
if ( userLocation != nil ) {
[pins removeObject:userLocation]; // avoid removing user location off the map
}
[mapView removeAnnotations:pins];
[pins release];
pins = nil;
}
Esta es la forma más sencilla de hacerlo:
fuente
Aquí se explica cómo eliminar todas las anotaciones, excepto la ubicación del usuario, escritas explícitamente porque imagino que vendré a buscar esta respuesta nuevamente:
fuente
Esto es muy similar a la respuesta de Sandip, excepto que no vuelve a agregar la ubicación del usuario, por lo que el punto azul no parpadea de nuevo.
fuente
No es necesario guardar ninguna referencia a la ubicación del usuario. Todo lo que se necesita es:
Y siempre que lo haya
mapView.showsUserLocation
configuradoYES
, seguirá teniendo la ubicación del usuario en el mapa. La configuración de esta propiedadYES
básicamente le pide a la vista del mapa que comience a actualizar y obtener la ubicación del usuario, para mostrarla en el mapa. De losMKMapView.h
comentarios:fuente
Versión rápida:
fuente
Swift 3
fuente
Swift 2.0 Simple y lo mejor:
fuente
Para eliminar un tipo de subclase, puede hacer
donde
PlacesAnnotation
es una subclase deMKAnnotation
fuente