Existe-t-il un moyen simple de supprimer toutes les annotations sur une carte sans parcourir toutes les annotations affichées dans Objective-c?
Existe-t-il un moyen simple de supprimer toutes les annotations sur une carte sans parcourir toutes les annotations affichées dans Objective-c?
Réponses:
Oui, voici comment
[mapView removeAnnotations:mapView.annotations]
Cependant, la ligne de code précédente supprimera toutes les annotations de carte "PINS" de la carte, y compris la broche de localisation de l'utilisateur "Blue Pin". Pour supprimer toutes les annotations de la carte et conserver l'épingle de localisation de l'utilisateur sur la carte, il existe deux méthodes possibles.
Exemple 1, conservez l'annotation de l'emplacement de l'utilisateur, supprimez toutes les broches, ajoutez la broche de l'emplacement de l'utilisateur, mais il y a un défaut avec cette approche, cela provoquera le clignotement de la broche de l'emplacement de l'utilisateur sur la carte, en raison de la suppression de la broche puis de son ajout arrière
- (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, je préfère personnellement éviter de supprimer la broche de l'utilisateur de l'emplacement 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;
}
Voici le moyen le 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, écrit explicitement car j'imagine que je reviendrai chercher cette réponse:
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 à la réponse de Sandip, sauf qu'il ne rajoute pas l'emplacement de l'utilisateur afin que le point bleu ne clignote plus.
-(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 de référence à l'emplacement de l'utilisateur. Il suffit de:
[mapView removeAnnotations:mapView.annotations];
Et tant que vous avez mapView.showsUserLocation
défini sur YES
, vous aurez toujours l'emplacement de l'utilisateur sur la carte. Les paramètres de cette propriété YES
demandent essentiellement à la vue de la carte de commencer à mettre à jour et à récupérer l'emplacement de l'utilisateur, pour l'afficher sur la carte. D'après les MKMapView.h
commentaires:
// Set to YES to add the user location annotation to the map and start updating its location
Version Swift:
func removeAllAnnotations() {
let annotations = mapView.annotations.filter {
$0 !== self.mapView.userLocation
}
mapView.removeAnnotations(annotations)
}