MKAnnotationView для пользователя местоположение PIN-код iPhone - PullRequest
0 голосов
/ 31 декабря 2010

У меня есть приложение, которое использует MKMapView, и в какой-то момент в приложении мне нужно удалить все текущие контакты на карте, используя

[mapView removeAnnotations:mapView.annotations]

И затем я хочу снова показать текущее местоположение пользователя

mapView.showUserLocation = YES

Но я могу только сделать так, чтобы он снова отображался как обычный вывод, потому что класс представления userLocation не является общедоступным, поэтому я не могу вернуть представления этого типа.Вот мой код

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id<MKAnnotation>)annotation

MKPinAnnotationView* annView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"currentloc"];

if (!annView) {
   MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"];
  annView.pinColor = MKPinAnnotationColorRed;
  annView.animatesDrop=TRUE;
  annView.canShowCallout = YES;
  annView.calloutOffset = CGPointMake(-5, 5);
  if ([annotation isKindOfClass:[DraggableAnnotationAM class]] ) annView.draggable =YES;
  return annView;

}
else {
  if ([annotation isKindOfClass:[DraggableAnnotationAM class]] ) annView.draggable =     YES;
  annView.annotation = annotation;
  return annView;
 }

Кроме того, благодаря отражению я обнаружил, что

MKUserLocationView

- это класс, используемый для отображения текущего местоположения, но поскольку он не является общедоступным, его небезопасноиспользовать, и мое приложение продолжает падать, и я уверен, что есть более простой способ.

Можно ли делать то, что я хочу, или я просто никогда не должен удалять аннотацию местоположения пользователя mapView?

Спасибозаранее

Ответы [ 2 ]

1 голос
/ 19 января 2017

Если вы хотите показывать только голубую точку для местоположения пользователя вместо обычного пина, верните nil в этой функции делегата mapView. Либо верните свой собственный объект MKAnnotationView (подкласс):

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
        if annotation is MKUserLocation {
            return nil // or return a custom MKAnnotationView
        } else { // etc.
0 голосов
/ 02 января 2011

Попробуйте сделать это с NSMutableArray.Надеюсь, это поможет вам решить вашу проблему!

 NSMutableArray *annotation = [[NSMutableArray alloc] init];
 for (id <MKAnnotation> annot_ in [mapView annotations])
 {
     if ( [annot_ isKindOfClass:[MKUserLocation class]] ) {
     }
     else {
         [annotation addObject:annot_];
     }
 }

 [mapView removeAnnotations:annotation];   
 [annotation release];   
 annotation = nil;
...