网上看了好多关于主题切换的博客,功能上都没有达到满足项目的预期,但却给我提供了许多好的想法,所以也执笔写下我的第一篇博客,希望是抛砖引玉。
首先展示功能效果
技术原理:
主题切换主要是基于RxSwift实现的,至于RxSwift不是这篇文章主要的内容,但我们需要大致了解它,而这里也只是用到了它的冰山一角。
RxSwift是什么?
RxSwif是ReactiveX的Swift版本,是函数式响应编程的框架。也就是类似iOS的 KVO,通知等观察者模式。
主题切换的设计思想
将所有的主题定义在枚举中以UIView的背景颜色为例,在扩展中声明一个关于背景的属性,在属性赋值时就相当于创建一个观察背景属性的观察者。当主题发生改变,观察者就会执行。
看到@IBInspectable关键字,或许大家已经知道了,没错就是这个主题变换支持 Xib、StoryBoard
最后:
相信你看到这里应该可以举一反三了。我对于常用的控件几乎都做了封装,即使你想扩展也是方便的很,如果你理解了这个设计思想的话。
源码地址:https://github.com/WangHaiO/ThemeSwitching.git