Czy istnieje prosty sposób na usunięcie wszystkich adnotacji na mapie bez iteracji przez wszystkie wyświetlane adnotacje w Objective-c?
Czy istnieje prosty sposób na usunięcie wszystkich adnotacji na mapie bez iteracji przez wszystkie wyświetlane adnotacje w Objective-c?
Odpowiedzi:
Tak, oto jak
[mapView removeAnnotations:mapView.annotations]
Jednak poprzedni wiersz kodu usunie z mapy wszystkie adnotacje mapy „PINS”, w tym pinezkę lokalizacji użytkownika „Blue Pin”. Aby usunąć wszystkie adnotacje mapy i zachować pinezkę lokalizacji użytkownika na mapie, można to zrobić na dwa sposoby
Przykład 1, zachowaj adnotację lokalizacji użytkownika, usuń wszystkie szpilki, dodaj pinezkę lokalizacji użytkownika z powrotem, ale jest wada w tym podejściu, spowoduje to, że pinezka lokalizacji użytkownika będzie migać na mapie, po usunięciu pinezki, a następnie dodaniu jej plecy
- (void)removeAllPinsButUserLocation1
{
id userLocation = [mapView userLocation];
[mapView removeAnnotations:[mapView annotations]];
if ( userLocation != nil ) {
[mapView addAnnotation:userLocation]; // will cause user location pin to blink
}
}
Przykład 2, osobiście wolę przede wszystkim unikać usuwania kodu PIN użytkownika lokalizacji,
- (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;
}
Oto najprostszy sposób, aby to zrobić:
-(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];
}
Oto jak usunąć wszystkie adnotacje z wyjątkiem lokalizacji użytkownika, napisane wyraźnie, ponieważ wyobrażam sobie, że ponownie będę szukał tej odpowiedzi:
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;
Jest to bardzo podobne do odpowiedzi Sandipa, z tym wyjątkiem, że nie dodaje ponownie lokalizacji użytkownika, więc niebieska kropka nie miga ponownie.
-(void)removeAllAnnotations
{
id userAnnotation = self.mapView.userLocation;
NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
[annotations removeObject:userAnnotation];
[self.mapView removeAnnotations:annotations];
}
Nie musisz zapisywać żadnych odniesień do lokalizacji użytkownika. Potrzebne jest tylko:
[mapView removeAnnotations:mapView.annotations];
Dopóki to mapView.showsUserLocation
ustawisz YES
, nadal będziesz mieć lokalizację użytkownika na mapie. Ustawienia tej właściwości YES
zasadniczo prosi widok mapy o rozpoczęcie aktualizacji i pobierania lokalizacji użytkownika, aby wyświetlić ją na mapie. Z MKMapView.h
komentarzy:
// Set to YES to add the user location annotation to the map and start updating its location
Wersja Swift:
func removeAllAnnotations() {
let annotations = mapView.annotations.filter {
$0 !== self.mapView.userLocation
}
mapView.removeAnnotations(annotations)
}