Есть ли способ подкласса 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;
}