功能
- 预建立的 UIKit 控件,支持自动主题化
- 主题可以是 JSON 或结构体
- 快速且容易实现
- 灵活且易于扩展
示例
要运行示例项目,请克隆仓库,然后首先从 Example 目录中运行 pod install
。
需求
iOS 8 和 Swift 4.2
安装
EasyThemer 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod 'EasyThemer'
文档
https://wfltaylor.github.io/EasyThemer/
使用方法
声明主题
声明主题有两种方法。
代码方法
可以通过重写 ThemeDecleration
来声明主题,这是大多数情况下推荐的方法。
示例
class LightTheme: ThemeDeclaration {
override func setupProperties() {
titleFont = UIFont(name: "Gill Sans", size: 44)
primaryFont = UIFont(name: "Gill Sans", size: 12)
backgroundColor = UIColor.white
prefersLargeTitles = true
barStyle = UIBarStyle.default
}
}
您也可以通过遵守 Theme
协议来声明主题,但由于更清晰的程度,推荐使用 ThemeDecleration 方法。
您还可以像这样向主题添加自定义属性
class LightTheme: ThemeDeclaration {
var seperatorColor: UIColor
override func setupProperties() {
titleFont = UIFont(name: "Gill Sans", size: 44)
primaryFont = UIFont(name: "Gill Sans", size: 12)
backgroundColor = UIColor.white
prefersLargeTitles = true
barStyle = UIBarStyle.default
seperatorColor = UIColor.gray
}
}
JSON 方法
可以通过使用 JSON 文件来声明主题。不建议本地使用,但对于从服务器下载主题来说是个好方法。
示例
{
"backgroundColorCode" : {
"red" : 0,
"alpha" : 1,
"blue" : 0,
"green" : 1
},
"barStyle" : "default",
"primaryFontCode" : {
"name" : "Chalkboard SE",
"pointSize" : 12
},
"barTintColorCode" : {
"red" : 1,
"alpha" : 1,
"blue" : 0,
"green" : 0.6
},
"titleFontCode" : {
"name" : "Chalkboard SE",
"pointSize" : 54
},
"textColorCode" : {
"red" : 0,
"alpha" : 1,
"blue" : 0,
"green" : 0
},
"prefersLargeTitles" : true,
"tintColorCode" : {
"red" : 1,
"alpha" : 1,
"blue" : 0,
"green" : 0
}
}
如果这是一个包中的文件,并且被命名为 CrazyTheme.json
,您可以使用 JSONTheme(named: "CrazyTheme")
来初始化。
使用 ThemeEngine
配置
要配置 ThemeEngine 单例,您可以将 ThemeEngine.standard.configure(theme: LightTheme())
放入您的 "完成启动带选项"。您必须提供一个默认主题。
设置主题
ThemeEngine.standard.setTheme(theme: LightTheme())
获取当前主题
ThemeEngine.standard.currentTheme!
使用预置 UIKit 组件
该库包含一些预置 UIKit 组件,包括 ThemeableNavigationBar
、ThemeableTabBar
、ThemeableLabel
、ThemeableButton
和 ThemeableView
。
这些组件主要是为了方便使用 Interface Builder,并假设您想要将哪些设置应用到控制器的哪个部分。
使用时,只需将视图的“自定义类”设置为可用的子类之一。这些类将自动设置,并与标准的 ThemeEngine 单例一起更改主题。
使用 ThemeEngineDelegate
实现自定义主题的推荐方式是使用 ThemeEngineDelegate
。
示例
extension MyViewController: ThemeEngineDelegate {
func themeChanged(theme: Theme) {
setTheme(theme: theme)
}
func themeReady(theme: Theme) {
setTheme(theme: theme)
}
func setTheme(theme: Theme) {
tableView.backgroundColor = theme.backgroundColor
}
func setupThemes() {
ThemeEngine.standard.register(self)
}
}
在这个示例中,setupThemes()
函数在viewDidLoad
中调用。在viewDidLoad
或初始化时立即设置主题非常重要,因为主题引擎可能尚未配置完毕——“在加载Storyboard完成后调用”。
作者
William Taylor
许可证
EasyThemer遵循MIT许可证。有关更多信息,请参阅LICENSE文件。