Существует ли простой способ удалить все аннотации на карту, не выполняя итерации через все отображенные аннотации в Цели-c?
Да, вот как
[mapView removeAnnotations:mapView.annotations]
Однако предыдущая строка кода удалит все аннотации карты "PINS" из карту, включая булавку местоположения пользователя «Синяя булавка». Чтобы удалить всю карту аннотации и удерживайте булавку местоположения пользователя на карте, есть два возможные способы сделать это
Пример 1, сохранить аннотацию местоположения пользователя, удалить все контакты, добавить расположение пользователя обратно, но у этого подхода есть недостаток, он приведет к миганию булавки местоположения пользователя на карте из-за удаления булавку, затем добавив ее обратно
- (void)removeAllPinsButUserLocation1
{
id userLocation = [mapView userLocation];
[mapView removeAnnotations:[mapView annotations]];
if ( userLocation != nil ) {
[mapView addAnnotation:userLocation]; // will cause user location pin to blink
}
}
Пример 2, я лично предпочитаю избегать удаления булавки пользователя местоположения во-первых,
- (void)removeAllPinsButUserLocation2
{
id userLocation = [mapView userLocation];
NSMutableArray *pins = [[NSMutableArray alloc] initWithArray:[mapView annotations]];
if ( userLocation != nil ) {
[pins removeObject:userLocation]; // avoid removing user location off the map
}
[mapView removeAnnotations:pins];
[pins release];
pins = nil;
}
Вот как удалить все аннотации, кроме местоположения пользователя, написанные явно, потому что я думаю, что снова буду искать этот ответ:
NSMutableArray *locs = [[NSMutableArray alloc] init];
for (id <MKAnnotation> annot in [mapView annotations])
{
if ( [annot isKindOfClass:[ MKUserLocation class]] ) {
}
else {
[locs addObject:annot];
}
}
[mapView removeAnnotations:locs];
[locs release];
locs = nil;