iOS开发之tintColor属性详解

详解tintColor属性

 

tintColor属性是iOS7以后新加的一个属性,这个属性定义了一个非默认的着色颜色值,其值的设置会影响到以视图为根视图的整个视图层次结构。它主要是改变控件的颜色,以获取一些有意思的视觉效果。

  • tintColor属性-  默认状况下,tintColor属性是默认为nil的,当咱们设置一个视图的tintColor属性时,他会自动传播到他的子视图的,所以,要设置一个控件的颜色,即就要设置他的父视图的tintColor,当你没有设置tintColor时,系统默认为蓝色。
  • 与tintColor属性相关的还有个tintAdjustmentMode属性,它是一个枚举值,定义了tint color的调整模式。
复制代码
typedef NS_ENUM(NSInteger, UIViewTintAdjustmentMode) {
        UIViewTintAdjustmentModeAutomatic,//视图的着色调整模式与父视图一致
        
        UIViewTintAdjustmentModeNormal, // 视图的tintColor属性返回彻底未修改的视图着色颜色

        UIViewTintAdjustmentModeDimmed,// 视图的tintColor属性返回一个去饱和度的、变暗的视图着色颜色

    } NS_ENUM_AVAILABLE_IOS(7_0);
复制代码
  • tintColorDidChange方法-  这个方法会在视图的tintColor或tintAdjustmentMode属性改变时自动调用。另外,若是当前视图的父视图的tintColor或tintAdjustmentMode属性改变时,也会调用这个方法。咱们能够在这个方法中根据须要去刷新咱们的视图。

示例:html

下面这个图片中是我在故事板中拖得几个控件,其中有按钮,label,滑块,imageView,固然都尚未设置tintColor的post

当我把self.view的tintColor改成red时,效果图以下字体

 

如上,你们能够看见能够经过改一个tintColor属性能够改不少控件的颜色,当你想要在一款APP中把他全部的控件颜色都改了的话,就能够在APPDelegate里改变window的tintColor,我尝试打印默认的tintColor和tintAdjustmentMode,分别输出了[UIDeviceRGBColorSpace 0 0.478431 1 1]和1,这是在咱们没有对整个视图层次结构设置任何tint color相关的值的状况下的输出。能够看到,虽然咱们没有设置tintColor,但它仍然返回了系统的默认值;而 tintAdjustmentMode则默认返回Normal的原始值。url

    NSLog(@"%@",self.view.tintColor);
    
    NSLog(@"%ld",self.view.tintAdjustmentMode);
    
    self.view.tintColor = [UIColor redColor];

 

 

可能有些同窗看到这儿纳闷了,不是说tintColor能够改变子视图的颜色吗?怎么上面的label和imageView的颜色怎么没改呢,这个问题呢,其实很简单,咱们能够经过重写tintColorDidChange这个方法来监测tintColor的变化,当self.View的tintColor颜色改变时,能够设置label字体的颜色。imageView的颜色没改的缘由是咱们没有设置图片的imageWithRenderingMode属性为AlwaysTemplatespa

相关文章
相关标签/搜索