MapView设置自定义大头针视图(Obj-C)

子类(MKPinAnnotationView) 默认视图就是大头针样式(棒棒糖)
如果要自定义图像,需要使用父类,不能使用MKPinAnnotationView

演示代码:

/**
 *  当设置大头针视图的时候大头针模型时调用
 *
 *  @param mapView    地图视图
 *  @param annotation 大头针模型
 *
 *  @return 大头针视图
 */
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)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;
    
}
MapView设置自定义大头针视图(Obj-C)_第1张图片
annotation.png

这样设置后,不会有动画滑落效果,设置动画滑落效果,需要在另外一个代理方法中设置

演示代码:

/**
 *  已经添加大头针视图后调用(还没显示时)
 *
 *  @param mapView 地图视图
 *  @param views   所有添加的大头针视图
 */
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)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;
            
        }];
        
    }
    
    
}

你可能感兴趣的:(MapView设置自定义大头针视图(Obj-C))