我想知道是否有人知道MKAnnotationView类的子类。在苹果的文档中,他们说一个例子是MKPinAnnotationView,所以我想知道是否还有其他预先创建的子类,比如用于跟踪设备当前位置的子类。如果有人有创建我自己的MKAnnotationView类的子类的技巧,那也是很棒的。
谢谢,泡泡先生
发布于 2010-10-22 16:13:03
我不知道还有其他的模板,但这并不意味着它们不存在。:)
无论如何,下面是如何创建自定义类:创建一个符合MKAnnotation协议的新类。您需要有两个NSString*类型的实例变量,分别名为title和subtitle,一个CLLocationCoordinate2D类型的实例变量,名为coordinate和一个适当的设置器方法(例如,属性)。这些字符串将显示在标注中。在mapView的委托中,实现方法-mapView:viewForAnnotation:的方式与实现UITableView的数据源的方式类似。也就是说,通过标识符将annotationView出队,设置新属性(例如,右侧附件视图的UIButtonTypeDetailDisclosure类型的按钮)。您可能希望在偏移下添加要显示的图像。只需使用MKAnnotationView的image属性即可。您的自定义图像的中心将被放置在指定的坐标处,因此您可能需要提供一个偏移量: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;
}发布于 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内部使用的私有类。
https://stackoverflow.com/questions/3994231
复制相似问题