0

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

我试过这个:

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

这里 MyAnnotation 是一个采用MKAnnotation协议的自定义类。问题是 myAnnotation 仍然是 MKUserLocation 类型的对象。我想要myAnnotation一个 MKAnnotation 对象。如何输入这个?请帮我。

4

1 回答 1

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...
}
于 2013-10-09T13:29:03.420 回答