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