Ios 有没有一种方法可以将用于MKUserLocation蓝点的MKAnnotationView子类化?

Ios 有没有一种方法可以将用于MKUserLocation蓝点的MKAnnotationView子类化?,ios,mapkit,mkannotationview,userlocation,callout,Ios,Mapkit,Mkannotationview,Userlocation,Callout,我通过子类化MKAnnotationView创建了一个自定义注释视图。该类还创建一个自定义标注(信息弹出“气泡”)视图,该视图被蒙皮以匹配我的应用程序 我还希望能够为用户位置点重新创建标注编号,但似乎我对该视图的唯一控制是是否完全覆盖该视图,方法是在mapView:viewfornotation:方法中使用以下命令: if(annotation == self.mapView.userLocation) { return nil; } 但我真正想做的是找出注释视图MapKit对用户位置

我通过子类化MKAnnotationView创建了一个自定义注释视图。该类还创建一个自定义标注(信息弹出“气泡”)视图,该视图被蒙皮以匹配我的应用程序

我还希望能够为用户位置点重新创建标注编号,但似乎我对该视图的唯一控制是是否完全覆盖该视图,方法是在
mapView:viewfornotation:
方法中使用以下命令:

if(annotation == self.mapView.userLocation)
{
    return nil;
}
但我真正想做的是找出注释视图MapKit对用户位置蓝点使用的是什么,然后对其进行子类化,以便我可以对其标注气泡进行蒙皮。。。还是有别的办法?或者根本没有办法?

您可以使用

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

我不确定这是否会对您有所帮助,但您可以使用默认的用户位置注释视图,然后在
mapView:didSelectAnnotationView:

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

我使用此技巧更改了标注标题和副标题,并使用
leftCalloutAccessoryView
添加了一幅图像。但是,我还没有尝试完全替换标注,因此我不知道是否可能。

我认为这不可能直接实现,但您可以在运行时使用以下内容覆盖某些方法:

这不起作用,因为它将蓝点替换为图像“MyLocationPin.png”。我希望能够使用蓝点对annotationView进行子类化,以便可以向其添加自定义详图索引。。。对不起,对不起,我不太明白你的问题。嗯……我会考虑你的问题:)谢谢:)我看看能不能重写一下。。。如果不够清晰,请随意编辑!这是一个聪明的想法,我已经尝试过了,但唯一的问题是似乎没有办法停止userLocation annotationView以停止显示其标注,即使我将其设置为“否”。有什么想法吗?您还需要在
mapView:DidAddAnnotationView:
中获取注释视图。在那里,您可以在
if
语句中使用与上面相同的测试,并在那里将
canShowCallout
设置为
NO
。非常感谢!快到了。。。我注意到对象的类是MKUserLocationView。是否有任何方法可以扩展或子类化MKUserLocationView来绘制新的气泡,或者我必须将代码直接构建到视图控制器中?对此我不确定。我知道
MKUserLocationView
是私有API,所以子类化它可能不可取。你不能像对待其他注释视图子类那样做吗?你知道怎么做吗?我不能将MKUserLocationView子类化,因为正如您所说,它是一个私有API,所以我得到了编译器错误:“语义问题:'LMLUserLocationView'不能使用'super',因为它是根类”。。。但是我需要得到蓝色的闪烁点,如果我只是子类MKAnnotationView,我就不会得到它:(