6

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

谢谢,大佬

4

2 回答 2

10

如果有人仍然对此感兴趣:

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

其他继承自 MKAnnotationView 的类是:

MKTransitCalloutView、MKAdAnnotationView、MKUserLocationView、MKUserLocationBreadCrumbView 和 MKPinAnnotationView

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

于 2011-04-29T01:35:49.263 回答
7

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

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

这是一些示例代码:

- (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;
}
于 2010-10-22T08:13:03.237 回答