首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MKAnnotationView的子类

MKAnnotationView的子类
EN

Stack Overflow用户
提问于 2010-10-22 13:44:56
回答 2查看 5.6K关注 0票数 6

我想知道是否有人知道MKAnnotationView类的子类。在苹果的文档中,他们说一个例子是MKPinAnnotationView,所以我想知道是否还有其他预先创建的子类,比如用于跟踪设备当前位置的子类。如果有人有创建我自己的MKAnnotationView类的子类的技巧,那也是很棒的。

谢谢,泡泡先生

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-22 16:13:03

我不知道还有其他的模板,但这并不意味着它们不存在。:)

无论如何,下面是如何创建自定义类:创建一个符合MKAnnotation协议的新类。您需要有两个NSString*类型的实例变量,分别名为titlesubtitle,一个CLLocationCoordinate2D类型的实例变量,名为coordinate和一个适当的设置器方法(例如,属性)。这些字符串将显示在标注中。在mapView的委托中,实现方法-mapView:viewForAnnotation:的方式与实现UITableView的数据源的方式类似。也就是说,通过标识符将annotationView出队,设置新属性(例如,右侧附件视图的UIButtonTypeDetailDisclosure类型的按钮)。您可能希望在偏移下添加要显示的图像。只需使用MKAnnotationView的image属性即可。您的自定义图像的中心将被放置在指定的坐标处,因此您可能需要提供一个偏移量:aView.centerOffset = CGPointMake(0, -20)

下面是一些示例代码:

代码语言:javascript
复制
- (MKAnnotationView *) mapView: (MKMapView *) mapView viewForAnnotation: (id<MKAnnotation>) annotation {
    // reuse a view, if one exists
    MKAnnotationView *aView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"pinView"];

    // create a new view else
    if (!aView) {
        aView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pinView"];
    }

    // now configure the view
    aView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    [(UIButton*)aView.rightCalloutAccessoryView addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
    aView.canShowCallout = YES;
    aView.enabled = YES;
    aView.image = [UIImage imageNamed:@"green_pin.png"];
    aView.centerOffset = CGPointMake(0, -20);

    return aView;
}
票数 7
EN

Stack Overflow用户

发布于 2011-04-29 09:35:49

如果还有人对此感兴趣:

您可以使用Objective-C运行时函数获取类的所有子类,如下所述:http://cocoawithlove.com/2010/01/getting-subclasses-of-objective-c-class.html

从MKAnnotationView继承的其他类包括:

MKTransitCalloutView、MKAdAnnotationView、MKUserLocationView、MKUserLocationBreadCrumbView和MKPinAnnotationView

其中MKPinAnnotationView是唯一记录在案的。所有其他类都是Apple内部使用的私有类。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3994231

复制
相关文章

相似问题

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