Есть ли простой способ удалить все аннотации на карте без повторения всех отображаемых аннотаций в Objective-c?
Есть ли простой способ удалить все аннотации на карте без повторения всех отображаемых аннотаций в Objective-c?
Ответы:
Да вот как
[mapView removeAnnotations:mapView.annotations]
Однако предыдущая строка кода удалит все аннотации карты «PINS» с карты, включая булавку местоположения пользователя «Blue Pin». Чтобы удалить все аннотации карты и оставить на карте булавку местоположения пользователя, есть два возможных способа сделать это.
Пример 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;
}
Вот самый простой способ сделать это:
-(void)removeAllAnnotations
{
//Get the current user location annotation.
id userAnnotation=mapView.userLocation;
//Remove all added annotations
[mapView removeAnnotations:mapView.annotations];
// Add the current user location annotation again.
if(userAnnotation!=nil)
[mapView addAnnotation:userAnnotation];
}
Вот как удалить все аннотации, кроме местоположения пользователя, явно написанные, потому что я думаю, что снова буду искать этот ответ:
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;
Это очень похоже на ответ Sandip, за исключением того, что он не добавляет повторно местоположение пользователя, поэтому синяя точка не мигает снова и снова.
-(void)removeAllAnnotations
{
id userAnnotation = self.mapView.userLocation;
NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
[annotations removeObject:userAnnotation];
[self.mapView removeAnnotations:annotations];
}
Вам не нужно сохранять ссылку на местоположение пользователя. Все, что нужно, это:
[mapView removeAnnotations:mapView.annotations];
И до тех пор, пока вы mapView.showsUserLocation
установили YES
, у вас все еще будет местоположение пользователя на карте. При настройке этого свойства в YES
основном запрашивает отображение карты, чтобы начать обновление и выборку местоположения пользователя, чтобы отобразить его на карте. Из MKMapView.h
комментариев:
// Set to YES to add the user location annotation to the map and start updating its location
Быстрая версия:
func removeAllAnnotations() {
let annotations = mapView.annotations.filter {
$0 !== self.mapView.userLocation
}
mapView.removeAnnotations(annotations)
}