Themes
故事
您是否想过支持夜间模式?或者根据季节改变应用程序的外观?或者根据付费状态切换功能?这些都是对应用程序事件的反应。
许多其他框架鼓励您使用硬编码的值,例如label.xyz_textColors = [.red, .blue], textField.xyz_fonts = [font1, font2], ...
。这也使得更改变得非常困难,因为索引的用法,您需要记住1st索引是该主题,2nd索引是那个主题,... 另外,xyz_textColors
就像是试图复制整个UIKit
API,这些API经常更新。
Themes就是为了帮助您。通常,在一个应用程序中,您有一些有限的颜色和字体。您可以有更多,但这并不鼓励,并且有设计问题。当你有一个主题时,更改发生在同一个地方。
功能
- 支持iOS、macOS、tvOS、watchOS的通用支持
- 完全控制主题
- 更新现有视图
- 面向协议
- 可扩展
使用
步骤 1: 创建主题
通过遵守 Theme
或只是标记协议来声明主题。您可以声明任何东西,包括嵌套对象,全取决于您的需求。您还可以创建任意数量的主题。
struct MyTheme: Theme {
let topImage: UIImage
let cellColor: UIColor
let backgroundColor: UIColor
let name: String
let titleFont: UIFont
let subtitleFont: UIFont
}
然后根据您的模板创建一些主题。
let dayTheme = MyTheme(topImage: UIImage(named: "day"), cellColor: .white)
let nightTheme = MyTheme(topImage: UIImage(named: "night"), cellColor: .black)
这种做法的好处在于您可以从 JSON 初始化您的主题,这可以从后端获取。
let json = [
"primary_color": "#21ABE9",
"font_name": "Chewy"
]
let unicornTheme = MyTheme(json)
步骤 2: 注册当前主题
当应用程序启动时,您需要声明 1 个主题作为当前主题,它可以来自缓存。
ThemeManager.shared.currentTheme = dayTheme
步骤 3: 响应主题更改
您可以在喜欢的地方执行此操作。它是使用当前主题设置的,并且当主题更改时。
// ViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
use(MyTheme.self) {
$0.title = $1.name
$0.tableView.backgroundColor = $1.backgroundColor
$0.navigationController?.navigationBar.setBackgroundImage($1.topImage, for: .default)
$0.tableView.rowHeight = $1.name == "Unicorn" ? 180 : 120
$0.tableView.reloadData()
}
}
// Cell.swift
override func awakeFromNib() {
super.awakeFromNib()
imageView.layer.cornerRadius = 5
imageView.layer.masksToBounds = true
use(MyTheme.self) {
$0.titleLabel.font = $1.titleFont
$0.subtitleLabel.font = $1.subtitleFont
$0.container.backgroundColor = $1.cellColor
}
}
步骤 4: 更改主题
更改当前主题就像分配一个新主题一样简单。所有事情都将在实时中迅速发生。
ThemeManager.shared.currentTheme = nightTheme
安装
主题 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod 'Themes'
主题 同样可通过 Carthage 获得。要安装,只需在 Cartfile 中写入
github "onmyway133/Themes"
主题 也可以手动安装。只需下载并将 Source
文件夹拖放到您的项目中。
作者
Pham Khoa,[email protected]
贡献
我们非常希望您为 主题 贡献,有关更多信息,请查看 CONTRIBUTING 文件。
许可
主题 在 MIT 许可下提供。有关更多信息,请查看 LICENSE 文件。