Удалить аннотацию местоположения пользователя из 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 массив.

Это простой способ, которым я следовал. Как бы то ни было, я не уверен, что есть другой способ сделать это. Пожалуйста, оставьте комментарий, если вы нашли другое решение.

Другие вопросы по тегам