夜间模式

夜间模式,其实跟换肤功能没什么区别,用户可以在正常模式和夜间模式之间切换。我实现的思路总结为:继承+通知+两套图片

继承一个父类,姑且命名它BaseViewController吧,所有的UIViewController都继承它。其实大家都应该养成一个习惯,项目在构建的时候,尽量让所有的UIViewController都继承一个父的UIViewController,这样的框架让代码有更好的拓展性,比如项目之前没有考虑做夜间模式的,后期才加需求,这样拓展这个功能就很容易了。看看我demo的BaseViewController.h文件的代码:

BaseViewController.m文件的代码:


看到这两个文件,应该能大概明白我刚刚所说的实现思路了:继承+通知+两套图片。

       这个父类BaseViewController,其他的UIViewController继承了它,而它们都是默认重写ViewDidLoad这个方法的。我在BaseViewController的ViewDidLoad方法里面加入了一个通知,监听正常模式和夜间模式互相切换的事件,那所有继承这个父类并且实例化的UIViewController都有在监听这个事件。收到通知后就执行updateView这个方法,这个方法是公有的,子UIViewController都有这个方法,如果想做更多,就重写这个方法就行。在这个方法里,format是我定义的一个枚举变量, 用来记录当前是正常还是夜间模式。方法里判断了当前模式,正常设置view的背景为white,夜间设置view的背景为gray。为什么定义一个公有变量imageNamePre呢?这个就是两套资源图片的小技巧。假如一张图片在正常模式用,名字叫mm.png,那它对应的夜间模式的那张图片就要命名为nf-mm.png。nf只是一个约定字符而已,你也可以叫其他,那就可以用一个变量代替两种情况的图片了:NSString*imageName=[NSString stringWithFormat:@"%@mm.png",self.imageNamePre];

这样的好处就是当更新图片的时候,这样少了很多不必要的判断。

       Ok,已经初始化的UIViewController通通都搞定了,那当我改变了模式之后才初始化出来的UIViewController呢,所以我也在ViewDidLoad方法做了跟updateView一样的判断,之后每个子UIViewController初始化的时候都将自动判断模式和显示对应图片或者ui。

       最后一步就是处理事件发生时了,假如在设置里面设置模式切换,那就发送通知:


    O了,以上就是我实现夜间模式的框架和思路。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值