webentwicklung-frage-antwort-db.com.de

Wie entferne ich alle Anmerkungen aus MKMapView, ohne den blauen Punkt zu entfernen?

Ich möchte alle Anmerkungen ohne den blauen Punkt meiner Position aus meiner Kartenansicht entfernen. Wenn ich anrufe:

[mapView removeAnnotations:mapView.annotations];

alle Anmerkungen werden entfernt.

Auf welche Weise kann ich überprüfen (wie bei einer for-Schleife für alle Anmerkungen), ob die Anmerkung nicht die Anmerkung mit dem blauen Punkt ist?

EDIT(habe ich damit gelöst):

for (int i =0; i < [mapView.annotations count]; i++) { 
    if ([[mapView.annotations objectAtIndex:i] isKindOfClass:[MyAnnotationClass class]]) {                      
         [mapView removeAnnotation:[mapView.annotations objectAtIndex:i]]; 
       } 
    }
26
Mat

Wenn Sie sich die MKMapView-Dokumentation anschauen, scheint es, als hätten Sie die Annotations-Eigenschaft, mit der Sie spielen können. Es sollte ziemlich einfach sein, durchzugehen und zu sehen, welche Anmerkungen Sie haben:

for (id annotation in myMap.annotations) {
    NSLog(@"%@", annotation);
}

Sie haben auch die userLocation-Eigenschaft, die Ihnen die Anmerkung gibt, die den Standort des Benutzers darstellt. Wenn Sie die Anmerkungen durchgehen und sich alle merken, die nicht der Benutzerstandort sind, können Sie sie mit der removeAnnotations:-Methode entfernen:

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

Hoffe das hilft,

Sam

58
deanWombourne

Wenn Sie es schnell und einfach mögen, können Sie ein Array der MKUserLocation-Annotation filtern. Sie können dies an MKMapViews Funktion removeAnnotations: übergeben. 

 [_mapView.annotations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"!(self isKindOfClass: %@)", [MKUserLocation class]]];

Ich gehe davon aus, dass dies den gleichen manuellen Filtern entspricht, mit Ausnahme der Verwendung eines Prädikats für die Drecksarbeit.

31
Sebastian Bean

Ist es nicht einfacher, einfach folgendes zu tun:

//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];
13
Mikael

kürzester Weg, um alle Anmerkungen zu bereinigen und die Annotation der Klasse MKUserLocation beizubehalten

[self.mapView removeAnnotations:self.mapView.annotations];
8
DazChong
for (id annotation in map.annotations) {
    NSLog(@"annotation %@", annotation);

    if (![annotation isKindOfClass:[MKUserLocation class]]){

        [map removeAnnotation:annotation];
    }
    }

ich habe so modifiziert 

6
chings228

es ist einfacher, einfach folgendes zu tun:

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];
1
kunalg

Für Swift 3.0

for annotation in self.mapView.annotations {
    if let _ = annotation as? MKUserLocation {
       // keep the user location
    } else {
       self.mapView.removeAnnotation(annotation)
    }
}
0
Laszlo