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

38

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

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

Ваш Ответ

7   ответов
86

Обновить:

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

mapView.removeAnnotations(mapView.annotations)

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

Попробуй это:

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

РЕДАКТИРОВАТЬ: Swift версия

let annotationsToRemove = mapView.annotations.filter { $0 !== mapView.userLocation }
mapView.removeAnnotations( annotationsToRemove )
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Pavel Kaljunen
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

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

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

Life is always better with NSPredicate filter

20

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

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

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

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

}

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

Error: User Rate Limit Exceeded
7

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

mapView.removeAnnotations(mapView.annotations)

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

mapView.showsUserLocation = true
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
-1

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

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

 [listRemoveAnnotations release];
Error: User Rate Limit ExceededlistRemoveAnnotationsError: User Rate Limit Exceeded-removeAnimationsError: User Rate Limit Exceeded
3

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

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

}

В противном случае вы можете установить флаг, чтобы распознать ваши аннотации в– mapView:viewForAnnotation:.

Error: User Rate Limit Exceeded Pavel Kaljunen
0

ВSwift 4.1:

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

self.mapView.removeAnnotations(self.annotations).

Этот метод по умолчанию не удаляетMKUserLocation аннотация отannotations список.

Однако, если вам нужно отфильтровать все аннотации, кромеMKUserLocation (увидетьannotationsNoUserLocation переменная ниже) по любой другой причине, например по центру всех аннотаций, кромеMKUserLocation аннотации вы можете использовать это простое расширение ниже.

extension MKMapView {

    var annotationsNoUserLocation : [MKAnnotation] {
        get {
            return self.annotations.filter{ !($0 is MKUserLocation) }
        }
    }

    func showAllAnnotations() {
        self.showAnnotations(self.annotations, animated: true)
    }

    func removeAllAnnotations() {
        self.removeAnnotations(self.annotations)
    }

    func showAllAnnotationsNoUserLocation() {
        self.showAnnotations(self.annotationsNoUserLocation, animated: true)
    }

}

Похожие вопросы