为什么需要出现 tintColor ?
解决以前不方便统一设置视图颜色风格的通点,方便自定义系统控件外观
跟UIAppearance
协议设计有点类似,UIAppearance
是为了方便统一 设置一类控件的外观,而tintColor
是为方便设置某个控件的外观,或者 说某个容器内所有控件的风格。
像在
UIViewController
中,通过这段代码可以实现容器内,所有的子 view 风格统一化,这样在这个控制器中的所有子 view 都会以tintColor
显示
1 | self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal |
UIView
的tintAdjustmentMode
需要说明一下,这是一个UIViewTintAdjustmentMode
枚举
- UIViewTintAdjustmentModeAutomatic(着色调整模式自动)
- UIViewTintAdjustmentModeNormal(着色调整模式正常)
- UIViewTintAdjustmentModeDimmed(着色调整模式变暗,打开控风格会变成灰白模式)
先看看官方 API 说明
https://developer.apple.com/documentation/uikit/uiview/1622467-tintcolor?language=objc
iOS7 以后所有的 UIView 以及它的子类都新增了一个叫 tintColor 的接口,方便我们对视图进行颜色调整
注意事项
UIImageView
需要设置renderingMode
为UIImageRenderingModeAlwaysTemplate
才能生效。renderingMode
是一个类型为UIImageRenderingMode
的枚举
- UIImageRenderingModeAutomatic (默认渲染模式,自动模式)
- UIImageRenderingModeAlwaysOriginal(总是绘制原来的图片,不把它当成临时图片来处理)
- UIImageRenderingModeAlwaysTemplate (总是绘制临时图片,会忽略它原本的颜色信息,也就是根据
tintColor
生产图片)
UIImageView 的使用
1 | UIImage *image = [UIImage imageNamed:@"xxx.png"]; |
tintColor 更新
在子类中重写 - (void)tintColorDidChange
方法,就可以实现每次更新 tintColor
的时候调用相关配置
1 | - (void)tintColorDidChange |