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
本文解释权归:子文
如需转载请注明出处,谢谢
网友评论