类型转换MKUserLocation类到MKAnnotation协议

时间:2013-10-09 13:16:55

标签: iphone ios mkannotation

mapView:viewForAnnotation:方法有一个名为annotation的参数(MKUserLocation)。在我的应用程序中,我想将此annotation类型转换为MKAnnotation。

我试过这个:

-(MKAnnotationView*)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
    MyAnnotation *myAnnotation = (MyAnnotation*)annotation;
}

此处MyAnnotation是一个采用MKAnnotation协议的自定义类。问题是myAnnotation仍然是MKUserLocation类型对象。我希望myAnnotation作为MKAnnotation对象。怎么输入这个?请帮帮我。

1 个答案:

答案 0 :(得分:1)

所有注释调用viewForAnnotation委托方法,无论其类型如何。这包括地图视图自己的用户位置蓝点注释,类型为MKUserLocation

在投射annotation或尝试将其视为自定义类之前,您需要检查当前annotation是否属于您感兴趣的类型。

例如:

-(MKAnnotationView*)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation 
{
    if (! [annotation isKindOfClass:[MyAnnotation class]])
    {
        //return nil (ie. default view) 
        //if annotation is NOT of type MyAnnotation...
        //this includes MKUserLocation.
        return nil;
    }


    //If execution reached this point, 
    //you know annotation is of type MyAnnotation
    //so ok to treat it like MyAnnotation...

    MyAnnotation *myAnnotation = (MyAnnotation*)annotation;

    //create and return custom MKAnnotationView here...
}