首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将MKUserLocation类类型转换为MKAnnotation协议

将MKUserLocation类类型转换为MKAnnotation协议
EN

Stack Overflow用户
提问于 2013-10-09 21:16:55
回答 1查看 617关注 0票数 0

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

我试过这个:

代码语言:javascript
复制
-(MKAnnotationView*)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
    MyAnnotation *myAnnotation = (MyAnnotation*)annotation;
}

这里的MyAnnotation是一个采用MKAnnotation协议的自定义类。问题是myAnnotation仍然是一个MKUserLocation类型的对象。我希望myAnnotation作为MKAnnotation对象。怎么打字转换这个?请帮帮我。

EN

回答 1

Stack Overflow用户

发布于 2013-10-09 21:29:03

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

在强制转换annotation或尝试将其视为您的自定义类之前,您需要检查当前annotation是否属于您感兴趣的类型(或不是)。

例如:

代码语言:javascript
复制
-(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...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19273179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档