美文网首页
夜间模式实现方式

夜间模式实现方式

作者: zaijianbali | 来源:发表于2017-12-06 01:36 被阅读5次

    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

    本文解释权归:子文

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

    来杯可乐催更吧

    请子文喝可乐

    相关文章

      网友评论

          本文标题:夜间模式实现方式

          本文链接:https://www.haomeiwen.com/subject/nurmbxtx.html