全局修改控件的颜色
UIView 中有一个 tintColor 属性,该属性会在 view hierarchy 中传递下去。比如 window 的 tintColor 为红色,那么其 subviews 的 tintColor 都会是红色的。并且还可以通过 UIAppearance 中的来对控件进行全局外观设置:
UIButton.appearance().tintColor = UIColor.magentaColor()
在 iOS 9 中还新增了一个修改「局部外观」的 API~
UIButton.appearanceWhenContainedInInstancesOfClasses([MyView.self]).tintColor = UIColor.cyanColor()
修改图片的颜色
当然 app 中除了纯色的控件之外还有各种图片。 UIImage 有一项属性叫做 renderingMode ,可以设置为:
1)AlwaysOriginal让图片显示为应有的颜色。
2)AlwaysTemplate使图片显示为模版模式,无视其颜色。
3)Automatic
这项是默认的。大多数情况下一张图片放在系统控件中会显示其应有的颜色,但有的情况下其颜色会被无视,比如在 UITabBarItem 中的图片。
利用这个属性我们就可以将 app 中的图片也修改为配合主题的颜色:let templateImage = image?.imageWithRenderingMode(.AlwaysTemplate)
templateImage.tintColor = myColor()
但每次使用图片都这样代码设置一次又很麻烦,不过幸运的是我们可以直接在 Assets.xcassets 中设置图片的属性: