MKMapView自定义大头针
如何自定义大头针
——设置 MKMapView 的代理
实现下面的代理方法,返回大头针控件
- ( MKAnnotationView *)mapView:( MKMapView *)mapView viewForAnnotation:( id< MKAnnotation >)annotation;
根据传进来的 ( id < MKAnnotation >)annotation 参数创建并返回对应的大头针控件
代理方法的使用注意
如果返回 nil ,显示出来的大头针就采取系统的默认样式
标识用户位置的蓝色发光圆点,它也是一个大头针,当显示这个大头针时,也会调用代理方法
因此,需要在代理方法中分清楚 ( id < MKAnnotation >)annotation 参数代表自定义的大头针还是蓝色发光圆点
1 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
2 {
3 // 判断annotation的类型
4 if (![annotation isKindOfClass:[MJTuangouAnnotation class]]) return nil;
5
6 // 创建MKAnnotationView
7 static NSString *ID = @"tuangou";
8 MKAnnotationView *annoView = [mapView dequeueReusableAnnotationViewWithIdentifier:ID];
9 if (annoView == nil) {
10 annoView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:ID];
11 annoView.canShowCallout = YES;
12 }
13 // 传递模型数据
14 annoView.annotation = annotation;
15
16 // 设置图片
17 MJTuangouAnnotation *tuangouAnnotation = annotation;
18 annoView.image = [UIImage imageNamed:tuangouAnnotation.icon];
19
20 return annoView;
21 }
MKAnnotationView
地图上的大头针控件是 MKAnnotationView
MKAnnotationView 的属性
1 @property (nonatomic, strong) id <MKAnnotation> annotation;
2 大头针模型
3
4 @property (nonatomic, strong) UIImage *image;
5 显示的图片
6
7 @property (nonatomic) BOOL canShowCallout;
8 是否显示标注
9
10 @property (nonatomic) CGPoint calloutOffset;
11 标注的偏移量
12
13 @property (strong, nonatomic) UIView *rightCalloutAccessoryView;
14 标注右边显示什么控件
15
16 @property (strong, nonatomic) UIView *leftCalloutAccessoryView;
17 标注左边显示什么控件
MKPinAnnotationView
MKPinAnnotationView 是 MKAnnotationView 的子类
MKPinAnnotationView 比 MKAnnotationView 多了 2 个属性
1 @property (nonatomic) MKPinAnnotationColor pinColor;//大头针颜色
2
3 @property (nonatomic) BOOL animatesDrop;//大头针第一次显示时是否从天而降