Я хотел бы удалить все аннотации из своего mapview без синей точки моего положения. Когда я звоню:
[mapView removeAnnotations:mapView.annotations];
все аннотации удалены.
В который путь я могу проверить (как для цикла на всех аннотациях), если аннотация не является синей точечной аннотацией?
РЕДАКТИРОВАНИЕ (я решил с этим):
for (int i =0; i < [mapView.annotations count]; i++) {
if ([[mapView.annotations objectAtIndex:i] isKindOfClass:[MyAnnotationClass class]]) {
[mapView removeAnnotation:[mapView.annotations objectAtIndex:i]];
}
}
, глядя на документацию MKMAPVIEW , похоже, что у вас есть аннотации, чтобы играть с. Следует довольно просто перейти через это и посмотреть, какие аннотации у вас есть:
for (id annotation in myMap.annotations) {
NSLog(@"%@", annotation);
}
У вас также есть свойство userLocation
, которое дает вам аннотацию, представляющее местоположение пользователя. Если вы проходите по аннотациям и помните все из них, которые не являются местоположением пользователя, вы можете затем удалить их с помощью метода :
Метод:
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];
Надеюсь, это поможет,
SAM
Если вам нравится быстро и просто, есть способ отфильтровать массив аннотации MKUserLocation. Вы можете передать это в функцию removeAnnotations: MKMapView.
[_mapView.annotations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"!(self isKindOfClass: %@)", [MKUserLocation class]]];
Я предполагаю, что это почти то же самое, что и описанные выше ручные фильтры, за исключением использования предиката для выполнения грязной работы.