Je souhaite supprimer toutes les annotations de ma carte sans le point bleu de ma position. Quand j'appelle:
[mapView removeAnnotations:mapView.annotations];
toutes les annotations sont supprimées.
De quelle manière puis-je vérifier (comme une boucle for sur toutes les annotations) si l'annotation n'est pas l'annotation en point bleu?
EDIT(j'ai résolu avec ça):
for (int i =0; i < [mapView.annotations count]; i++) {
if ([[mapView.annotations objectAtIndex:i] isKindOfClass:[MyAnnotationClass class]]) {
[mapView removeAnnotation:[mapView.annotations objectAtIndex:i]];
}
}
En regardant la documentation MKMapView , il semble que vous ayez la propriété annotations pour jouer. Il devrait être assez simple de parcourir cela et de voir quelles annotations vous avez:
for (id annotation in myMap.annotations) {
NSLog(@"%@", annotation);
}
Vous disposez également de la propriété userLocation
qui vous donne l'annotation représentant l'emplacement de l'utilisateur. Si vous parcourez les annotations et vous souvenez de toutes les adresses autres que l'emplacement de l'utilisateur, vous pouvez les supprimer à l'aide de la méthode removeAnnotations:
:
NSInteger toRemoveCount = myMap.annotations.count;
NSMutableArray *toRemove = [NSMutableArray arrayWithCapacity:toRemoveCount];
for (id annotation in myMap.annotations)
if (annotation != myMap.userLocation)
[toRemove addObject:annotation];
[myMap removeAnnotations:toRemove];
J'espère que cela t'aides,
Sam
Si vous aimez simple et rapide, il existe un moyen de filtrer un tableau de l'annotation MKUserLocation. Vous pouvez le transmettre à la fonction removeAnnotations: MKMapView.
[_mapView.annotations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"!(self isKindOfClass: %@)", [MKUserLocation class]]];
Je suppose que c'est à peu près la même chose que les filtres manuels affichés ci-dessus, à l'exception de l'utilisation d'un prédicat pour faire le sale boulot.
N’est-il pas plus simple de faire ce qui suit:
//copy your annotations to an array
NSMutableArray *annotationsToRemove = [[NSMutableArray alloc] initWithArray: mapView.annotations];
//Remove the object userlocation
[annotationsToRemove removeObject: mapView.userLocation];
//Remove all annotations in the array from the mapView
[mapView removeAnnotations: annotationsToRemove];
[annotationsToRemove release];
moyen le plus rapide de nettoyer toutes les annotations et de préserver les annotations de la classe MKUserLocation
[self.mapView removeAnnotations:self.mapView.annotations];
for (id annotation in map.annotations) {
NSLog(@"annotation %@", annotation);
if (![annotation isKindOfClass:[MKUserLocation class]]){
[map removeAnnotation:annotation];
}
}
j'ai modifié comme ça
il est plus facile de faire ce qui suit:
NSMutableArray *annotationsToRemove = [NSMutableArray arrayWithCapacity:[self.mapView.annotations count]];
for (int i = 1; i < [self.mapView.annotations count]; i++) {
if ([[self.mapView.annotations objectAtIndex:i] isKindOfClass:[AddressAnnotation class]]) {
[annotationsToRemove addObject:[self.mapView.annotations objectAtIndex:i]];
[self.mapView removeAnnotations:annotationsToRemove];
}
}
[self.mapView removeAnnotations:annotationsToRemove];
Pour Swift 3.0
for annotation in self.mapView.annotations {
if let _ = annotation as? MKUserLocation {
// keep the user location
} else {
self.mapView.removeAnnotation(annotation)
}
}