笔记:iOS的tintColor的使用

tintColor是iOS7在UIView中新加属性,翻译为中文是“着色”。如果未设置tintColor的颜色值,则会返回系统默认设置了的蓝色颜色值,这个值会影响以当前视图为根视图的整个视图层次结构。例如,在页面中创建一个Button按钮,我们发现按钮的标题颜色默认为蓝色,默认情况下一个视图的tintColor是nil,这个视图会使用父视图的tintColor值。当我们设置指定视图的tintColor的属性值后,这个着色值将会传递到在这个视图的视图层级的所有子视图,如果子视图没有设置tintColor,则默认使用父视图的颜色值。

1、测试代码

//父视图
UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, 120)];
[backView setBackgroundColor:[UIColor whiteColor]];
[self.view addSubview:backView];
[backView setTintColor:[UIColor redColor]];

//在父视图backView中添加第一个一个button1
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeSystem];
[button1.titleLabel setFont:[UIFont boldSystemFontOfSize:15.0f]];    [button1 setBackgroundColor:[UIColor yellowColor]];
[button1 setTitle:@"TestA" forState:UIControlStateNormal];
[backView addSubview:button1];

//在父视图backView中添加第二个button2
UIButton *button2 = [UIButton buttonWithType:UIButtonTypeSystem];
[button2.titleLabel setFont:[UIFont boldSystemFontOfSize:15.0f]];
[button2 setBackgroundColor:[UIColor yellowColor]];
[button2 setTitle:@"TestB" forState:UIControlStateNormal];
[backView addSubview:button2];
button2.tintColor = [UIColor greenColor];

//添加与backView同级的button到self.view上
UIButton *button3 = [UIButton buttonWithType:UIButtonTypeSystem];
[button3.titleLabel setFont:[UIFont boldSystemFontOfSize:15.0f]];
[button3 setBackgroundColor:[UIColor yellowColor]];
[button3 setTitle:@"TestB" forState:UIControlStateNormal];
[self.view addSubview:button3];
照片
  • self.view的tintColor未设置颜色,则使用系统蓝色默认值,button3为self.view的子视图,由于未设置自身的着色值,根据tintColor传递使用原则button3的tintColor也是系统默认值,标题显示蓝色;
  • backView是self.view的子视图,button1和button2是backView的子视图,此时backView的tintColor设置为红色,button1的tintColor未设置,button2设置为绿色,显示结果为button1使用backView传递过来的着色值红色,button2显示自身设置的着色值绿色

4、tintAdjustmentMode属性

这个属性是一个枚举属性,它定义了tintColor的调整模式;

typedef NS_ENUM(NSInteger, UIViewTintAdjustmentMode) {
    UIViewTintAdjustmentModeAutomatic,// 视图的着色调整模式与父视图一致
    UIViewTintAdjustmentModeNormal,// 视图的tintColor属性返回完全未修改的视图着色颜色
    UIViewTintAdjustmentModeDimmed,//视图的tintColor属性返回一个去饱和度的、变暗的视图着色颜色
}

下面是设置为Dimmed的效果


image

3、tintColorDidChange

这个方法会在视图的tintColor或tintAdjustmentMode属性改变时自动调用。另外,如果当前视图的父视图的tintColor或tintAdjustmentMode属性改变时,也会调用这个方法。我们可以在这个方法中根据需要去刷新我们的视图。

4、UIImageView使用tintColor

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 120)];
UIImage *image = [[UIImage imageNamed:@"tabbar_Image"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];    imageView.contentMode = UIViewContentModeCenter;
imageView.tintColor = [UIColor redColor];
[imageView setImage:image];
[self.view addSubview:imageView];

左侧为原图,右侧为设置tintColor为红色的结果


image

在对图片处理时,如果图片的一个像素的alpha是1,则将它的颜色渲染为tintColor的值。如果alpha小于1的时候,则设置为透明,不会被渲染。这个处理比较暴力,若果图片的颜色多样的话并且alpha=1就会渲染为一种颜色。

  • 介绍imageWithRenderingMode:
    使用renderingMode设置UIImage的渲染模式,可以设定UIImage是否使用当前视图的tintColor渲染。
typedef NS_ENUM(NSInteger, UIImageRenderingMode) {
    UIImageRenderingModeAutomatic,          // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式。
    UIImageRenderingModeAlwaysOriginal,     // 按照原图进行渲染,始终绘制图片原始状态,不使用Tint Color
    UIImageRenderingModeAlwaysTemplate,     // 始终根据TintColor绘制图片,忽略图片的颜色信息
}

5、APP设置全局TintColor

[[UIApplication sharedApplication] keyWindow].tintColor = [UIColor redColor];

你可能感兴趣的:(笔记:iOS的tintColor的使用)