Как удалить все аннотации из 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]];
}
}
Ответы
Ответ 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)
}
}