我如何使用UIAppearance管理我的应用主题(第1/2部分)

在第一部分中,我将解释动机,方法和定义我使用的对象。

在第二部分中,我将更深入地研究与UIKit API交互的ThemeManager对象及其在应用程序中的使用方式。

最近,我添加了更改应用程序“电视流”主题的可能性,这是最终结果:

为了以一种容易,可维护和可自定义的方式进行操作,我使用了UIKit中的UIAppearance。

该协议具有一些方法,这些方法使您可以更改几个UIKit组件的外观,例如UINavigationBar,UIBarButtonItem等。

此外,您可以对其进行自定义,以便仅当该组件包含在其他组件类型中时更改外观。 由于视图遵循树结构,因此当UIBarButtonItem位于UINavigationBar或UIToolbar内部时,可以选择具有不同的外观。

阅读完Apple文档后,我发现Ray Wenderlich的教程和Abhimuralidharan的教程很有用。 我还以Siesta示例应用程序中的代码为起点。

我使用以下对象来管理主题:

  • ThemeName (枚举):以独特的方式列出所有可能的主题;
  • 主题 (协议):定义定义主题所需的所有属性;
  • LightTheme,DarkTheme,BlackTheme (结构):符合主题协议并实现主题变体;
  • ThemeRepository (协议):摘要如何加载和保存主题;
  • DefaultsThemeRepository (类):使用标准的UserDefaults保存和加载主题;
  • ThemeManager (类):返回当前主题并应用不同的主题,使用存储库检索当前主题并保存所应用的主题;