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

Как удалить все аннотации из MKMapView без удаления синей точки?

Я хотел бы удалить все аннотации из моего вида карты без синей точки моей позиции. Когда я звоню:

[mapView removeAnnotations:mapView.annotations];

все аннотации удаляются.

Как я могу проверить (например, цикл for для всех аннотаций), если аннотация не является аннотацией синей точки?

EDIT (я решил с этим):

for (int i =0; i < [mapView.annotations count]; i++) { 
    if ([[mapView.annotations objectAtIndex:i] isKindOfClass:[MyAnnotationClass class]]) {                      
         [mapView removeAnnotation:[mapView.annotations objectAtIndex:i]]; 
       } 
    }
4b9b3361

Ответ 1

Глядя на документацию MKMapView, похоже, у вас есть свойство аннотаций для игры. Это должно быть довольно просто перебрать это и посмотреть, какие аннотации у вас есть:

for (id annotation in myMap.annotations) {
    NSLog(@"%@", annotation);
}

У вас также есть свойство userLocation, которое дает вам аннотацию, представляющую местоположение пользователя. Если вы просмотрите аннотации и помните все из них, которые не являются местоположением пользователя, вы можете удалить их с помощью метода removeAnnotations::

NSInteger toRemoveCount = myMap.annotations.count;
NSMutableArray *toRemove = [NSMutableArray arrayWithCapacity:toRemoveCount];
for (id annotation in myMap.annotations)
    if (annotation != myMap.userLocation)
        [toRemove addObject:annotation];
[myMap removeAnnotations:toRemove];

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

Сэм

Ответ 2

Если вам нравится быстрый и простой, есть способ фильтрации массива аннотации MKUserLocation. Вы можете передать это в функцию MKMapView removeAnnotations:.

 [_mapView.annotations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"!(self isKindOfClass: %@)", [MKUserLocation class]]];

Я предполагаю, что это почти то же самое, что и ручные фильтры, опубликованные выше, за исключением использования предиката для выполнения грязной работы.

Ответ 3

Не проще ли просто сделать следующее:

//copy your annotations to an array
    NSMutableArray *annotationsToRemove = [[NSMutableArray alloc] initWithArray: mapView.annotations]; 
//Remove the object userlocation
    [annotationsToRemove removeObject: mapView.userLocation]; 
 //Remove all annotations in the array from the mapView
    [mapView removeAnnotations: annotationsToRemove];
    [annotationsToRemove release];

Ответ 4

кратчайший способ очистки всех аннотаций и сохранения аннотации класса MKUserLocation

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

Ответ 5

for (id annotation in map.annotations) {
    NSLog(@"annotation %@", annotation);

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

        [map removeAnnotation:annotation];
    }
    }

i изменен следующим образом

Ответ 6

проще сделать следующее:

NSMutableArray *annotationsToRemove = [NSMutableArray arrayWithCapacity:[self.mapView.annotations count]];
    for (int i = 1; i < [self.mapView.annotations count]; i++) {
        if ([[self.mapView.annotations objectAtIndex:i] isKindOfClass:[AddressAnnotation class]]) {
            [annotationsToRemove addObject:[self.mapView.annotations objectAtIndex:i]];
            [self.mapView removeAnnotations:annotationsToRemove];
        }
    }

[self.mapView removeAnnotations:annotationsToRemove];

Ответ 7

Для Swift 3.0

for annotation in self.mapView.annotations {
    if let _ = annotation as? MKUserLocation {
       // keep the user location
    } else {
       self.mapView.removeAnnotation(annotation)
    }
}