8 ответов:
Да, вот как
[mapView removeAnnotations:mapView.annotations]однако предыдущая строка кода удалит все аннотации карты "булавки" из карта, включая pin-код местоположения пользователя "Blue Pin". Чтобы удалить все карты аннотации и сохранить местоположение пользователя на карте, есть два возможные способы сделать это
Пример 1, сохраните аннотацию местоположения пользователя, удалите все контакты, добавьте расположение пользователя закрепить обратно, но есть недостаток с этим подходом, это будет вызывать у пользователя расположение pin-код мигает на карте, из-за удаления затем pin-код добавляет его обратно
- (void)removeAllPinsButUserLocation1 { id userLocation = [mapView userLocation]; [mapView removeAnnotations:[mapView annotations]]; if ( userLocation != nil ) { [mapView addAnnotation:userLocation]; // will cause user location pin to blink } }Пример 2, я лично предпочитаю избегать удаления pin-кода пользователя местоположения во-первых,
- (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
Swift версия:
func removeAllAnnotations() { let annotations = mapView.annotations.filter { !== self.mapView.userLocation } mapView.removeAnnotations(annotations) }
Swift 3
if let annotations = self.mapView.annotations { self.mapView.removeAnnotations(annotations) }
Comments