Подтвердить что ты не робот

Как удалить все аннотации из MKMapView, кроме аннотации местоположения пользователя?

Я использую removeAnnotations для удаления моих аннотаций из mapView, но при этом он удаляет местоположение пользователя ann. Как я могу предотвратить это или как вернуть пользовательский анонс?

NSArray *annotationsOnMap = mapView.annotations;
        [mapView removeAnnotations:annotationsOnMap];
4b9b3361

Ответ 1

Update:

Когда я попытался с помощью SDK iOS 9, аннотация пользователя больше не удаляется. Вы можете просто использовать

mapView.removeAnnotations(mapView.annotations)

Исторический ответ (для приложений, работающих на iOS до iOS 9):

Попробуйте следующее:

NSMutableArray * annotationsToRemove = [ mapView.annotations mutableCopy ] ;
[ annotationsToRemove removeObject:mapView.userLocation ] ;
[ mapView removeAnnotations:annotationsToRemove ] ;

EDIT: версия Swift

let annotationsToRemove = mapView.annotations.filter { $0 !== mapView.userLocation }
mapView.removeAnnotations( annotationsToRemove )

Ответ 2

Чтобы очистить все аннотации с карты:

[self.mapView removeAnnotations:[self.mapView annotations]];

Чтобы удалить указанные аннотации из Mapview

 for (id <MKAnnotation> annotation in self.mapView.annotations)
{
    if (![annotation isKindOfClass:[MKUserLocation class]])
    {
              [self.mapView removeAnnotation:annotation];   
    }

}

Надеюсь, это может вам помочь.

Ответ 3

Для Swift вы можете просто использовать однострочный:

mapView.removeAnnotations(mapView.annotations)

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

mapView.showsUserLocation = true

Ответ 4

Если ваше местоположение пользователя является типом класса MKUserLocation, используйте isKindOfClass, чтобы избежать удаления аннотации местоположения пользователя.

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

}

Иначе вы можете установить флаг для распознавания вида аннотаций в – mapView:viewForAnnotation:.

Ответ 5

Как насчет фильтра NSPredicate?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"className != %@", NSStringFromClass(MKUserLocation.class)];
NSArray *nonUserAnnotations = [self.mapView.annotations filteredArrayUsingPredicate:predicate];
[self.mapView removeAnnotations:nonUserAnnotations];

Жизнь всегда лучше с фильтром NSPredicate

Ответ 6

Привет, попробуйте это, я получил решение из этого кода:

 NSMutableArray*listRemoveAnnotations = [[NSMutableArray alloc] init];
[Mapview removeAnnotations:listRemoveAnnotations];

 [listRemoveAnnotations release];