mapView:viewForAnnotation:
方法有一个名为annotation
的参数(MKUserLocation)。在我的应用程序中,我想将此annotation
类型转换为MKAnnotation。
我试过这个:
-(MKAnnotationView*)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
MyAnnotation *myAnnotation = (MyAnnotation*)annotation;
}
此处MyAnnotation是一个采用MKAnnotation
协议的自定义类。问题是myAnnotation仍然是MKUserLocation类型对象。我希望myAnnotation
作为MKAnnotation对象。怎么输入这个?请帮帮我。
答案 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...
}