是否有办法子类化MKUserLocation蓝点使用的MKAnnotationView



我通过子类化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

相关内容

  • 没有找到相关文章

最新更新