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?
Réponses
Trop de publicités?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;
}
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];
}
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;
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];
}
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