之前看网易音乐 for iOS 有一版更新之后提供了主题切换的功能,其颜色还能够让用户自定义。当时觉得挺好玩的,就感觉要做很多工作的样子。
但最近在刷《 Programming iOS 9 》才知道有很简单的实现方式~
全局修改控件的颜色
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
,可以设置为
-
AlwaysOriginal让图片显示为应有的颜色。
-
AlwaysTemplate使图片显示为模版模式,无视其颜色。
-
Automatic
这项是默认的。大多数情况下一张图片放在系统控件中会显示其应有的颜色,但有的情况下其颜色会被无视,比如在
UITabBarItem
中的图片。
利用这个属性我们就可以将 app 中的图片也修改为配合主题的颜色啦~
let templateImage = image?.imageWithRenderingMode(.AlwaysTemplate)
templateImage.tintColor = myColor()
但每次使用图片都这样代码设置
一次又很麻烦,不过幸运的是我们可以直接在 Assets.xcassets 中设置图片的属性~