ios-自定义大头针的样式

来源:互联网 发布:mac怎么播放rar 编辑:程序博客网 时间:2024/05/17 08:01

我们如果想自定义大头针的话,我们可以这么做。

首先我们要知道的是当我们调用了下面这条语句去添加大头针模型的时候,会去调用一个代理方法

 [self.mapView addAnnotation:annotation];
代理方法如下所示,只要我们添加了大头针模型,就会来到下面这个方法,我们要进行设置并且返回对应的View

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
如下是代理方法的实现,我们在下面的方法中如果返回的nil,就代表的是让这个view的样式交给系统去处理,大头针还是会出来的,在ios11中,系统默认返回的大头针类型是MKMarkerAnnotationView,这个类是ios11中新增的。大头针的样式也发生了改变。

需要注意的是下面这个代理方法的实现起来其实就和我们处理Cell的CellForRow那个方法中的样式是一样的。MKPinAnnotationView中原本设置颜色只能通过pinColor进行设置,而且只能设置如下几个枚举值

   MKPinAnnotationColorRed = 0,
    MKPinAnnotationColorGreen,
    MKPinAnnotationColorPurple

所以在ios9中用pinTintColor来进行代替,还有一个属性需要注意的是,如果我们想添加大头针的时候,让这个大头针出现从天而降,我们就要去设置animatesDrop这个属性为YES

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{     //这里如果返回nil,就表示的是用户没有自定义的需求,所有的view的样式由系统来处理    //我们这里需要注意的是,如果这里要设置的是用户定位的那个大头针,也就是那个蓝色圆点的大头针,我们就不做任何处理    if([annotation isKindOfClass:[MKUserLocation class]])    {        return nil;    }    //自定义了大头针的View,跟Cell的创建几乎一样    static NSString * ID = @"CellID";        //MKAnnotationView 里面的属性都是没有设置的,所以会显示不出来    //MKPinAnnotationView 中的子类默认是有设置view的,所以会有显示    MKPinAnnotationView * annoView =(MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:ID];       if(annoView==nil)    {           //在这个构造方法中传入的模型annotation,我们也可以设置为nil,然后在外面去设置也可以,而且也还可以不用去设置,因为系统会自动的帮我们去设置        annoView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:ID];    }    //设置随机颜色    annoView.pinTintColor = [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1];    //ios9已经被废弃    //annoView.pinColor = MKPinAnnotationColorRed;        annoView.animatesDrop = YES;    return annoView;   }



原创粉丝点击