Esiste un modo semplice per eliminare tutte le annotazioni su una mappa senza iterare tutte le annotazioni visualizzate in Objective-c?
Esiste un modo semplice per eliminare tutte le annotazioni su una mappa senza iterare tutte le annotazioni visualizzate in Objective-c?
Risposte:
Sì, ecco come
[mapView removeAnnotations:mapView.annotations]
Tuttavia, la riga di codice precedente rimuoverà dalla mappa tutte le annotazioni "PIN" della mappa, compreso il segnaposto della posizione dell'utente "Blue Pin". Per rimuovere tutte le annotazioni sulla mappa e mantenere il segnaposto della posizione dell'utente sulla mappa, ci sono due modi possibili per farlo
Esempio 1, conservare l'annotazione della posizione dell'utente, rimuovere tutti i pin, aggiungere nuovamente il pin della posizione dell'utente, ma c'è un difetto con questo approccio, farà lampeggiare il pin della posizione dell'utente sulla mappa, a causa della rimozione del pin e dell'aggiunta indietro
- (void)removeAllPinsButUserLocation1
{
id userLocation = [mapView userLocation];
[mapView removeAnnotations:[mapView annotations]];
if ( userLocation != nil ) {
[mapView addAnnotation:userLocation]; // will cause user location pin to blink
}
}
Esempio 2, personalmente preferisco evitare di rimuovere il pin dell'utente della posizione in primo luogo,
- (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;
}
Ecco il modo più semplice per farlo:
-(void)removeAllAnnotations
{
//Get the current user location annotation.
id userAnnotation=mapView.userLocation;
//Remove all added annotations
[mapView removeAnnotations:mapView.annotations];
// Add the current user location annotation again.
if(userAnnotation!=nil)
[mapView addAnnotation:userAnnotation];
}
Ecco come rimuovere tutte le annotazioni tranne la posizione dell'utente, scritta esplicitamente perché immagino che tornerò a cercare questa risposta:
NSMutableArray *locs = [[NSMutableArray alloc] init];
for (id <MKAnnotation> annot in [mapView annotations])
{
if ( [annot isKindOfClass:[ MKUserLocation class]] ) {
}
else {
[locs addObject:annot];
}
}
[mapView removeAnnotations:locs];
[locs release];
locs = nil;
Questo è molto simile alla risposta di Sandip, tranne per il fatto che non aggiunge nuovamente la posizione dell'utente, quindi il punto blu non lampeggia di nuovo.
-(void)removeAllAnnotations
{
id userAnnotation = self.mapView.userLocation;
NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
[annotations removeObject:userAnnotation];
[self.mapView removeAnnotations:annotations];
}
Non è necessario salvare alcun riferimento alla posizione dell'utente. Tutto ciò che serve è:
[mapView removeAnnotations:mapView.annotations];
E finché hai mapView.showsUserLocation
impostato YES
, avrai ancora la posizione dell'utente sulla mappa. Le impostazioni di questa proprietà su YES
richiedono fondamentalmente la visualizzazione della mappa per avviare l'aggiornamento e il recupero della posizione dell'utente, per mostrarla sulla mappa. Dai MKMapView.h
commenti:
// Set to YES to add the user location annotation to the map and start updating its location
Versione rapida:
func removeAllAnnotations() {
let annotations = mapView.annotations.filter {
$0 !== self.mapView.userLocation
}
mapView.removeAnnotations(annotations)
}