Gibt es eine einfache Möglichkeit, alle Anmerkungen auf einer Karte zu löschen, ohne alle in Objective-c angezeigten Anmerkungen zu durchlaufen?
Gibt es eine einfache Möglichkeit, alle Anmerkungen auf einer Karte zu löschen, ohne alle in Objective-c angezeigten Anmerkungen zu durchlaufen?
Antworten:
Ja, hier ist wie
[mapView removeAnnotations:mapView.annotations]
In der vorherigen Codezeile werden jedoch alle Kartenanmerkungen "PINS" aus der Karte entfernt, einschließlich des Benutzerstandort-Pins "Blue Pin". Es gibt zwei Möglichkeiten, um alle Kartenanmerkungen zu entfernen und den Benutzerstandort-Pin auf der Karte zu belassen
Beispiel 1: Behalten Sie die Benutzerstandortanmerkung bei, entfernen Sie alle Stifte, fügen Sie den Benutzerstandortstift wieder hinzu. Bei diesem Ansatz tritt jedoch ein Fehler auf. Der Benutzerstandortstift blinkt auf der Karte, da der Stift entfernt und dann hinzugefügt wird zurück
- (void)removeAllPinsButUserLocation1
{
id userLocation = [mapView userLocation];
[mapView removeAnnotations:[mapView annotations]];
if ( userLocation != nil ) {
[mapView addAnnotation:userLocation]; // will cause user location pin to blink
}
}
Beispiel 2: Ich persönlich ziehe es vor, das Entfernen des Standortbenutzer-Pins zu vermeiden.
- (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;
}
Hier ist der einfachste Weg, dies zu tun:
-(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];
}
So entfernen Sie alle Anmerkungen mit Ausnahme des Benutzerstandorts, die explizit geschrieben wurden, weil ich mir vorstelle, dass ich erneut nach dieser Antwort suchen werde:
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;
Dies ist der Antwort von Sandip sehr ähnlich, außer dass der Benutzerstandort nicht erneut hinzugefügt wird, sodass der blaue Punkt nicht ein- und wieder blinkt.
-(void)removeAllAnnotations
{
id userAnnotation = self.mapView.userLocation;
NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
[annotations removeObject:userAnnotation];
[self.mapView removeAnnotations:annotations];
}
Sie müssen keinen Verweis auf den Benutzerstandort speichern. Alles was benötigt wird ist:
[mapView removeAnnotations:mapView.annotations];
Und solange Sie haben mapView.showsUserLocation
zu setzen YES
, werden Sie noch Benutzer Standort auf der Karte haben. Wenn Sie diese Eigenschaft so YES
einstellen, dass die Kartenansicht grundsätzlich aufgefordert wird , den Benutzerstandort zu aktualisieren und abzurufen, um ihn auf der Karte anzuzeigen. Aus den MKMapView.h
Kommentaren:
// Set to YES to add the user location annotation to the map and start updating its location
Schnelle Version:
func removeAllAnnotations() {
let annotations = mapView.annotations.filter {
$0 !== self.mapView.userLocation
}
mapView.removeAnnotations(annotations)
}