子类(MKPinAnnotationView) 默认视图就是大头针样式(棒棒糖)
如果要自定义图像,需要使用父类,不能使用MKPinAnnotationView
演示代码:
/**
* 当设置大头针视图的时候大头针模型时调用
*
* @param mapView 地图视图
* @param annotation 大头针模型
*
* @return 大头针视图
*/
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
static NSString *identifier = @"annotation";
// 排除定位大头针(否则定位大头针样式也会被修改掉)
if ([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
}
// 设置颜色需要使用MKAnnotationView的子类才行 MKPinAnnotationView
MKAnnotationView *anno = [mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (anno == nil) {
anno = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:identifier];
}
// 设置属性 (父类(MKAnnotationView)没有动画滑落和pinTintColor属性)
// 设置显示标注
anno.canShowCallout = YES;
/*
MKPinAnnotationView 默认视图就是大头针样式(棒棒糖)
如果要自定义图像,需要使用父类,不能使用MKPinAnnotationView
*/
anno.image = [UIImage imageNamed:@"自拍照"];
return anno;
}
这样设置后,不会有动画滑落效果,设置动画滑落效果,需要在另外一个代理方法中设置
演示代码:
/**
* 已经添加大头针视图后调用(还没显示时)
*
* @param mapView 地图视图
* @param views 所有添加的大头针视图
*/
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray<MKAnnotationView *> *)views{
// 遍历每一个大头针视图
for (MKAnnotationView *anno in views) {
// 排除定位大头针(否则定位大头针样式也会被修改掉)
if ([anno isKindOfClass:[MKUserLocation class]]) {
return ;
}
// 记录目标位置
CGRect targetAnno = anno.frame;
// 改大头针视图Y坐标(模拟动态滑落)
anno.frame = CGRectMake(targetAnno.origin.x,0,targetAnno.size.width,targetAnno.size.height);
// 动画移动位置到目标位置
[UIView animateWithDuration:0.5 animations:^{
anno.frame = targetAnno;
}];
}
}