EasyThemer 1.1.2

EasyThemer 1.1.2

William 维护。



  • William Taylor

EasyThemer

Version License Platform

功能

  • 预建立的 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 组件,包括 ThemeableNavigationBarThemeableTabBarThemeableLabelThemeableButtonThemeableView

这些组件主要是为了方便使用 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文件。