Удалить аннотацию местоположения пользователя из mapView
Я должен удалить все аннотации, добавленные в мой MKMapView, но когда я выполняю:
NSMutableArray *annotationsToRemove = [[NSMutableArray alloc] initWithArray: mapView.annotations];
[mapView removeAnnotations: annotationsToRemove];
Массив annotationsToRemove содержит MKUserLocation
аннотации, и это не удаляет его.
Есть ли способ сбросить карту? Мне нужно удалить все аннотации из него!
3 ответа
Вы можете просто установить свойство showUserLocation вашего mapView в NO.
mapView.showsUserLocation = NO;
В ч вставить
@property (weak) MKAnnotationView *ulv;
В м вставить
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated {
MKZoomScale currentZoomScale = mapView.bounds.size.width / mapView.visibleMapRect.size.width;
NSLog(@"current zoom scale is %f",currentZoomScale);
ulv = [mapView viewForAnnotation:mapView.userLocation];
if( currentZoomScale > 0.049 ){
ulv.hidden = YES;
}else{
ulv.hidden = NO;
}
}
На самом деле вы не можете редактировать MKUserLocation
аннотаций. Я имею в виду, вы не можете удалить его из массива аннотации карты, так как это read-only
собственностью MKMapView
,
Если вы посетите MKMapView.h
учебный класс. Вы найдете ниже линии
@property (nonatomic, readonly) MKUserLocation *userLocation;
Здесь мы видим, что это свойство доступно только для чтения. Поэтому мы не можем удалить его из MKMapView
массив аннотаций. Как бы вы ни столкнулись с трудностями при расчете с другими аннотациями, вы можете скрыть это во время выполнения.
Я пытаюсь объяснить, когда местоположение пользователя больше не требуется, вы можете установить NO
для свойства местоположения пользователя.
Например, с вашим кодом:
NSMutableArray *annotationsToRemove = [[NSMutableArray alloc] initWithArray: mapView.annotations];
[mapView removeAnnotations: annotationsToRemove];
[self.mapView setShowsUserLocation:NO];
NSLog(@"MapView annotations :%@", mapView.annotations);
Проверьте NSLog
выходной, вы увидите, что MKUserLocation
аннотация удалена из mapView.annotations
массив.
Это простой способ, которым я следовал. Как бы то ни было, я не уверен, что есть другой способ сделать это. Пожалуйста, оставьте комментарий, если вы нашли другое решение.