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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值