欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iOS 极其简单的夜间模式实现方案 附开源库

程序员文章站 2022-05-15 08:36:54
...

iOS 极其简单的夜间模式实现方案 附开源库

前言

开发过程中也许会遇到需要切换不同色系皮肤模式的需求,例如夜间模式切换,股票红涨绿跌的切换等。
单纯的从技术角度讲,这个功能实现起来并没有技术难点,最基本的做法是切换模式的时候抛个通知,VC或View收到通知后更改颜色图片等。虽然技术不难,但是实现难度相对较大,毕竟很琐碎,而且平白增加了很多控制代码,严重影响代码的可读和可维护性。

带着把对系统的影响降到最低的目标,我们想到了利用 Runtime来解决这个难题。毕竟任何想把对系统影响降到最低的边缘需求,我们都应该优先考虑是否可以利用Runtime来处理。


关于本问题的Runtime处理思路

1、 利用Runtime给基类NSObject添加属性用于保存设置的颜色以及图片等内容,并在合适的时机注册及移除监听。
2、当接收到颜色模式变更的通知后,根据最新的模式选项变更自身的颜色,图片等。
3、因为不同的UI控件有不同的颜色图片属性,所以应根据需要针对有差异的控件进行单独处理。有类似需求的统一处理,以便于尽可能的减少冗余代码的产生。


组件实现

/** 以下内容依据pod库整理 */

//管理类
IXColorMgr

//颜色设置相关【提供颜色选择器】
IXColor

//图片设置相关【提供图片选择器】
IXImage

//基类分类【提供最基本的颜色&图片存储,注册&注销监听,以及最基本的property更新】
NSObject+Color

//提供dealloc方法的回调通知【因为分类里无法重写dealloc方法,即便写了也无法生效】
IXDeallocBlockExecutor

//UIKit组件【提供最基本的UI控件的处理】
UIKit/**

//Quartz组件【提供最基本的CALayer极其部分子类的处理】
Quartz/**

组件使用

导入工程

1、使用cocoapod,在podfile文件中添加 pod ‘IXColor’,执行pod update即可。
2、不使用pod,访问网址:https://github.com/NSSONGMENG/IXColor下载demo,将IXColor文件夹拖入工程即可。
第二种方式便于自己动手修改

具体使用

    //导入头文件
    #import "IXColorHeader.h"

    //设置App所支持的相关模式
    [IXColorMgr defaultMgr].versions = @[@"white",@"black"];
    //当前所选模式
    [IXColorMgr defaultMgr].curVersion = @"white";

    //针对不同的模式设置控件颜色和图片
    eg.
    //UILabel
    label.textColorPicker = IXColorPickerWithRGB(0x1d1d1d,0xe2e2e2);

    //UISwitch
    switch.onTintColorPicker = IXColorPickerWithRGB(0xffe400,0xffac32);
    switch.tintColorPicker = IXColorPickerWithRGB(0xe64a4a,0x28ac8e);

    //UIView
    view.backgroundColorPicker = IXColorPickerWithRGB(0xe2e2e2,0x1d1d1d);

    //UINavigationBar
    navigationBar.barTintColorPicker = IXColorPickerWithRGB(0xe2e2e2,0x1d1d1d);

    //UIImageView
    UIImage * img1 = [UIImage imageNamed:@"m_c_usd"];
    UIImage * img2 = [UIImage imageNamed:@"m_c_usd_sl"];
    imageView.imagePicker = IXImagePickerWithImages(img1,img2);


由于控件太多,此处就不一一介绍了。
Demo地址: https://github.com/NSSONGMENG/IXColor