Как удалить все аннотации на MKMapView



есть ли простой способ удалить все аннотации на карте без перебора всех отображаемых аннотаций в Objective-c?

589   8  

8 ответов:

Да, вот как

[mapView removeAnnotations:mapView.annotations]

однако предыдущая строка кода удалит все аннотации карты "булавки" из карта, включая pin-код местоположения пользователя "Blue Pin". Чтобы удалить все карты аннотации и сохранить местоположение пользователя на карте, есть два возможные способы сделать это

Пример 1, сохраните аннотацию местоположения пользователя, удалите все контакты, добавьте расположение пользователя закрепить обратно, но есть недостаток с этим подходом, это будет вызывать у пользователя расположение pin-код мигает на карте, из-за удаления затем pin-код добавляет его обратно

- (void)removeAllPinsButUserLocation1 
{
    id userLocation = [mapView userLocation];
    [mapView removeAnnotations:[mapView annotations]];

    if ( userLocation != nil ) {
        [mapView addAnnotation:userLocation]; // will cause user location pin to blink
    }
}

Пример 2, я лично предпочитаю избегать удаления pin-кода пользователя местоположения во-первых,

- (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;
}

вот самый простой способ сделать это:

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

вот как удалить все аннотации, кроме местоположения пользователя, написанные явно, потому что я думаю, что снова буду искать этот ответ:

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;

Это очень похоже на ответ Sandip, за исключением того, что он не добавляет местоположение пользователя, поэтому синяя точка не мигает снова и снова.

-(void)removeAllAnnotations
{
    id userAnnotation = self.mapView.userLocation;

    NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
    [annotations removeObject:userAnnotation];

    [self.mapView removeAnnotations:annotations];
}

вам не нужно сохранять ссылку на местоположение пользователя. Все что нужно, это:

[mapView removeAnnotations:mapView.annotations]; 

и пока у вас есть mapView.showsUserLocation значение YES, вы все равно будете иметь местоположение пользователя на карте. Установите это свойство в YES в основном запрашивает представление карты, чтобы начать обновление и извлечение местоположения пользователя, чтобы показать его на карте. Из MKMapView.h комментарии:

// Set to YES to add the user location annotation to the map and start updating its location

Swift версия:

func removeAllAnnotations() {
    let annotations = mapView.annotations.filter {
         !== self.mapView.userLocation
    }
    mapView.removeAnnotations(annotations)
}

Swift 3

if let annotations = self.mapView.annotations {
    self.mapView.removeAnnotations(annotations)
}

Swift 2.0 Простой и лучший:

mapView.removeAnnotations(mapView.annotations)

Comments

    Ничего не найдено.