zoukankan      html  css  js  c++  java
  • iOS 开发--日间/夜间模式切换

    由于项目需求,需要进行日间和夜间模式的切换,经过实践和网上的资料,大概的实现方式如下:

    1.通常来说日间和夜间模式的切换会出现在设置里面。在项目中,我使用NSUserDefault来存储一个Key为Mode的值,日间模式值则为Day,夜间为Night,设置中根据切换的模式来进行键值的更新。更新之后,使用NSNotificationCenter发出通知。


    2.需要切换模式的ViewController中,可以定义一个isDay的BOOL值。并且需要作为通知的接收器来接收设置中按钮动作触发的通知。在处理通知的方法中,根据NSUserDefault中Key为Mode的值来进行isDay的赋值。YES为白天模式,NO为夜间模式。如果是TableView的话可以进行reloadData的操作进行更新,其他View如果需要更新的话使用setNeedsDisplay。


    3.在AppDelegate中需要首先判断NSUserDefault中Mode得值,如果没有的话,需要先设定一个默认值


    4.需要注意的是,这种方法对于UIImageView是不起作用的。所以,我另外添加了一层View,代码如下:

    1 UIView *nightModeView = [[UIView alloc] initWithFrame:self.view.frame];  
    2 
    3 nightModeView.background = [UIColor blackColor];  
    4 
    5 nightModelView.alpha = 0.5;  
    6 
    7 nightModeView.userInteracationEnabled = NO;  
    8 
    9 [self.view addSubview:nightModeView];  


    在夜间模式时添加。在日间模式时removeFromSuperview即可。

    5.其他ViewController在加载的时候。先进行isDay的赋值。

    1 self.button.background = isDay ? [UIColor whiteColor] : [UIColor blackColor];

    这样就避免了改变模式后重新打开app还是默认的颜色

    思路总结下来就是使用KVO来进行模式的监听,在各个ViewController中自定义一个值来判断当前的模式。模式切换时,对各个view进行刷新。对于图片的处理,则可以使用第4点

  • 相关阅读:
    vue2.0 + vux (六)NewsList 资讯页 及 NewsDetail 资讯详情页
    vue2.0 + vux (五)api接口封装 及 首页 轮播图制作
    vue2.0 + vux (四)Home页
    vue2.0 + vux (三)MySettings 页
    vue2.0 + vux (二)Footer组件
    vue2.0 + vux (一)Header 组件
    vue2 + typescript2 自定义过滤器
    flexible.js + makegrid.js 自适应布局
    vue-router钩子beforeRouteEnter函数获取到this实例
    weex 项目搭建
  • 原文地址:https://www.cnblogs.com/newBlash/p/4362245.html
Copyright © 2011-2022 走看看