101 votes

Comment faire pour supprimer toutes les Annotations sur un MKMapView

Est-il un moyen simple de supprimer toutes les annotations sur une carte sans itération à travers toute l'affichage des annotations en Objective-c?

249voto

RocketMan Points 2257

Oui, ici, est de savoir comment

[mapView removeAnnotations:mapView.annotations]

Cependant, la ligne de code précédente va supprimer tous les carte annotations "PINS" de l' la carte, y compris la localisation de l'utilisateur pin "Épingle". Pour supprimer tous les carte annotations et de garder l'emplacement de l'utilisateur pin sur la carte, il y a deux des moyens possibles de le faire

Exemple 1, à retenir l'emplacement de l'utilisateur d'annotation, de supprimer tous les coins, ajouter l'utilisateur l'emplacement de la goupille, mais il y a une faille à cette approche, il sera la cause de la localisation de l'utilisateur pin à clignoter sur la carte, en raison de la suppression le nip, puis l'ajouter à nouveau

- (void)removeAllPinsButUserLocation1 
{
    id userLocation = [mapView userLocation];
    [mapView removeAnnotations:[mapView annotations]];

    if ( userLocation != nil ) {
        [mapView addAnnotation:userLocation]; // will cause user location pin to blink
    }
}

Exemple 2, personnellement, je préfère éviter la suppression de l'emplacement de la goupille en premier lieu,

- (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;
}

36voto

Sandip Sarkar Points 327

Ici est la façon la plus simple de le faire:

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

17voto

Victor Van Hee Points 3076

Voici comment supprimer toutes les annotations à l'exception de l'emplacement de l'utilisateur, inscrit explicitement parce que j'imagine que je viendrai à la recherche de cette réponse encore une fois:

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;

13voto

Chris Points 566

Ceci est très similaire à Jonathan de réponse, sauf qu'il n'a pas re-ajout de la localisation de l'utilisateur, de sorte que le point bleu ne clignote pas sur et en dehors à nouveau.

-(void)removeAllAnnotations
{
    id userAnnotation = self.mapView.userLocation;

    NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
    [annotations removeObject:userAnnotation];

    [self.mapView removeAnnotations:annotations];
}

11voto

Aviel Gross Points 1110

Vous n'avez pas besoin d'enregistrer toute référence à l'emplacement de l'utilisateur. Tout ce qui est nécessaire est:

[mapView removeAnnotations:mapView.annotations]; 

Et aussi longtemps que vous avez mapView.showsUserLocation ensemble de YES, vous aurez toujours l'emplacement de l'utilisateur sur la carte. Les paramètres de cette propriété en YES essentiellement de demande de la carte pour démarrer la mise à jour et l'extraction à l'emplacement de l'utilisateur, pour l'afficher sur la carte. De la MKMapView.h commentaires:

// Set to YES to add the user location annotation to the map and start updating its location

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X