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

使用TableView时,通常会抽取Cell,自定义大头针视图也是一样

提取代码:


#import "JSAnnotationView.h"

@implementation JSAnnotationView

+ (instancetype)annotationViewWithMapView:(MKMapView *)mapView WithAnnotation:(id)annotation WithIdentifier:(NSString *)identifier{
    
    // 设置颜色需要使用MKAnnotationView的子类才行  MKPinAnnotationView
    JSAnnotationView *anno = (JSAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
    
    if (anno == nil) {
        anno = [[JSAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:identifier];
    }
    // 设置属性 (父类(MKAnnotationView)没有动画滑落和pinTintColor属性)
    
    // 设置显示标注
    anno.canShowCallout = YES;
    
    /*
     MKPinAnnotationView 默认视图就是大头针样式(棒棒糖)
     如果要自定义图像,需要使用父类,不能使用MKPinAnnotationView
     */
    anno.image = [UIImage imageNamed:@"自拍照"];
    
    return anno;
    
    
}

@end


外界使用时,导入头文件,根据提供的类方法创建自定义大头针视图


/**
 *  当设置大头针视图的时候大头针模型时调用
 *
 *  @param mapView    地图视图
 *  @param annotation 大头针模型
 *
 *  @return 大头针视图
 */
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation{
    
    static NSString *identifier = @"annotation";
    
    // 排除定位大头针(否则定位大头针样式也会被修改掉)
    if ([annotation isKindOfClass:[MKUserLocation class]]) {
        return nil;
    }
    JSAnnotationView *annotationView = [JSAnnotationView annotationViewWithMapView:mapView WithAnnotation:annotation WithIdentifier:identifier];
    
    return annotationView;
}

如果创建大头针视图类方法中的annotation参数传递nil,系统会根据代理方法(viewForAnnotation)对应的大头针模型进行设置

JSAnnotationView *annotationView = [JSAnnotationView annotationViewWithMapView:mapView nil WithIdentifier:identifier];

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