Есть ли способ подкласса MKAnnotationView, используемый для синей точки MKUserLocation? - PullRequest
3 голосов
/ 24 октября 2011

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

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

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

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

Ответы [ 3 ]

1 голос
/ 26 октября 2011

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

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

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

0 голосов
/ 03 июля 2013

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

0 голосов
/ 24 октября 2011

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

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;
}
...