我想知道是否有人知道 MKAnnotationView 类的任何子类。在苹果文档中,他们说一个例子是 MKPinAnnotationView,所以我想知道是否还有其他预先创建的子类,比如用于跟踪设备当前位置的子类。如果有人有创建我自己的 MKAnnotationView 类的子类的技巧,那也很棒。
谢谢,大佬
我想知道是否有人知道 MKAnnotationView 类的任何子类。在苹果文档中,他们说一个例子是 MKPinAnnotationView,所以我想知道是否还有其他预先创建的子类,比如用于跟踪设备当前位置的子类。如果有人有创建我自己的 MKAnnotationView 类的子类的技巧,那也很棒。
谢谢,大佬
如果有人仍然对此感兴趣:
您可以使用 Objective-C 运行时函数获取类的所有子类,如下所述:http: //cocoawithlove.com/2010/01/getting-subclasses-of-objective-c-class.html
其他继承自 MKAnnotationView 的类是:
MKTransitCalloutView、MKAdAnnotationView、MKUserLocationView、MKUserLocationBreadCrumbView 和 MKPinAnnotationView
其中 MKPinAnnotationView 是唯一记录在案的。所有其他都是 Apple 内部使用的私有类。
我不知道任何其他模板,但这并不意味着它们不存在。:)
无论如何,这里是创建自定义类的方法: 创建一个符合MKAnnotation
协议的新类。您将需要有两个NSString*
名为title
和类型的实例变量subtitle
和一个CLLocationCoordinate2D
名为坐标类型的实例变量和一个适当的设置方法(例如属性)。这些字符串将显示在标注中。在 mapView 的委托中,-mapView:viewForAnnotation:
以与实现 UITableView 的数据源类似的方式实现该方法。也就是说,通过标识符使annotationView 出列,设置新属性(例如,右侧附件视图的UIButtonTypeDetailDisclosure 类型的按钮)。您将需要添加一个图像以显示在偏移下方。只需使用image
MKAnnotationView 的属性。您的自定义图像的中心将放置在指定的坐标处,因此您可能需要给出一个偏移量: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;
}