夜间模式实现方式

2017-12-06  本文已影响5人  zaijianbali

iOS 夜间模式的应用场景在浏览器,小说类产品上应用较多。

实现方式也多样化。

方案一

比如小说类,总共没有几个页面。
用NSUserDefault保存isNightMode 然后全局使用。

1.针对普通的viewController更改背景色或者alpha值就可以了。
2.针对更改夜间模式开关所在的view,需要马上刷新。
如果是tableView 需要reload 一遍。

3.图片无法修改背景色,imageView.image = image1
image1 会遮盖背景色
所以针对imageView 处理方式是:

UIView *nightModeView = [[UIView alloc] initWithFrame:self.imageView.frame];  
nightModeView.background = [UIColor blackColor];  
nightModelView.alpha = 0.5;  
nightModeView.userInteracationEnabled = NO;  
[self.imageView addSubview:nightModeView];  

如果是非夜间模式的话,
这个地方就要

[nightModeView removeFromSuperview];

4.状态栏同样需要修改

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
        if (isNightMode) {
            [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
        } else {
            [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
        }
#pragma clang diagnostic pop
    }

同样导航栏工具栏也需要颜色变换

这种方式做出来的效果github上有一个方案比较好。
DKNightVersion

这种方案引入的代码比较多,我不太喜欢。但这种写法思路特别好,可以研究研究。

方案二

通过多个window

我们都知道 windowLevel
UIWindowLevelNormal;// 0.000000
UIWindowLevelStatusBar;// 1000.000000
UIWindowLevelAlert;// 2000.000000
也就是通过windowLevel 配置一下
不过就是增加了一层window,半透明效果。
特殊情况下可能不太好,但一般情况都没有问题。

具体怎么做,看源代码就知道了。

源码见github地址:
ZWNightMode

本文解释权归:子文

如需转载请注明出处,谢谢

来杯可乐催更吧

请子文喝可乐
上一篇下一篇

猜你喜欢

热点阅读