我通过子类化MKAnnotationView创建了一个自定义注释视图。这个类还创建了一个自定义callout (info弹出'bubble')视图,该视图的蒙皮与我的应用程序相匹配。
我还希望能够为用户位置点重新设计标注气泡,但似乎我对该视图的唯一控制是它是否被完全覆盖,通过在mapView:viewForAnnotation:
方法中使用以下内容:
if(annotation == self.mapView.userLocation)
{
return nil;
}
但是我真正想做的是找出viewmapkit为用户位置蓝点使用了什么annotation,然后子类化它,这样我就可以给它的callout bubble涂皮。还是有别的办法?还是根本不可能?
我不确定这会对你有帮助,但是你可以使用默认的用户位置注释视图,然后在mapView:didSelectAnnotationView:
中窃取视图:
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
if (view == [mapView viewForAnnotation:mapView.userLocation]) {
// do what you want to 'view'
// ...
}
// ...
}
我使用这个技巧来改变标注标题和副标题,并使用leftCalloutAccessoryView
添加图像。然而,我还没有尝试完全替换callout,所以我不知道这是否可能。
可以使用
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;
}
我认为这是不可能直接的,但你可以在运行时重写一些方法:http://theocacao.com/document.page/266