Есть ли способ подкласса MKAnnotationView, используемый для синей точки MKUserLocation?

Я создал пользовательский вид аннотации, создав подкласс MKAnnotationView. Этот класс также создает настраиваемое представление выноски (всплывающее окно с информацией о пузыре), оформление которого соответствует моему приложению.

Я также хочу иметь возможность повторно создать пузырь выноски для точки местоположения пользователя, но кажется, что единственный элемент управления, который у меня есть над этим представлением, состоит в том, полностью ли он переопределен или нет, с помощью следующего внутри mapView:viewForAnnotation: метод:

if(annotation == self.mapView.userLocation)
{
    return nil;
}

Но то, что я действительно хочу сделать, это выяснить, какой вид аннотации MapKit использует для синей точки местоположения пользователя, а затем создать ее подкласс, чтобы я мог очистить пузырь выноски... Или есть другой способ? Или просто никак?

3 ответа

Я не уверен, что это поможет вам, но вы можете использовать представление аннотации местоположения пользователя по умолчанию, а затем украсть его в mapView:didSelectAnnotationView::

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
    if (view == [mapView viewForAnnotation:mapView.userLocation]) {
        // do what you want to 'view'
        // ...
    }
    // ...
}

Я использовал этот трюк, чтобы изменить заголовок выноски и подзаголовок, и добавить изображение, используя leftCalloutAccessoryView, Однако я не пытался полностью заменить выноску, поэтому я не знаю, возможно ли это.

Я думаю, что это невозможно напрямую, но вы можете переопределить некоторые методы во время выполнения с помощью этого: http://theocacao.com/document.page/266

Ты можешь использовать

if ([annotation isKindOfClass:[MKUserLocation class]]) { // or if(annotation == self.mapView.userLocation)
   MKAnnotationView * annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"MyLocation"];
   if (annotationView == nil) {
      annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"MyLocation"] autorelease];
         annotationView.canShowCallout = NO;
         annotationView.image = [UIImage imageNamedWithBrand:@"MyLocationPin.png"];
      } else {
         annotationView.annotation = annotation;
      }
   return annotationView;
}
Другие вопросы по тегам