iOS开发中,实现夜间模式

作者: KennyHito | 来源:发表于2016-08-15 17:03 被阅读498次

    献给写作者的 Markdown 新手指南 : Markdown 新手指南

    github下载地址 : Demo下载地址

    [注意🐷] : 夜间模式已更新 : http://www.jianshu.com/p/06df11f17824

    文章源地址 : 原文章

    • 本人在原作者的文章中添加一个简单功能和github下载地址,文章可以转载,请标记来源,谢谢!如果想要你还想要你些效果或者功能,请关注 : 我的专题
    效果图

    思路
    切换夜间/白天模式时,发送通知给所有ViewController,让它们切换到相应的主题。但是,由于未初始化的ViewController无法接收通知,所以,需要将主题模式保存下来(单例或数据持久化),然后在ViewController viewDidLoad时根据保存的主题模式展示相应的主题模式。当然,还需要一个默认主题模式。

    开始实现夜间模式

    • 首先建一个管理模式主题的单例管理类:ThemeManagement
    .h文件
    #import <Foundation/Foundation.h>
    @interface ThemeManagement : NSObject
    /** 是否是夜间模式 */
    @property (nonatomic,assign) BOOL isDarkTheme;
    + (instancetype)shareManagement;
    @end
    
    .m文件
    // 单例
    static ThemeManagement * themeManagement;
    @implementation ThemeManagement
    + (instancetype)shareManagement{ 
    if (themeManagement == nil) { 
            themeManagement = [[ThemeManagement alloc]init]; 
           // 默认不是夜间模式 
           themeManagement.isDarkTheme = NO; 
    } 
    return themeManagement;
    }
    
    • 再创建一个BaseViewControll(其余ViewController继承于它)
    - (void)viewDidLoad {
          [super viewDidLoad]; 
          // Do any additional setup after loading the view. 
          // 进来的时候根据单例的主题,显示相应的主题 
          // 在这里我只是简单的改变了一下背景颜色,实际项目中应准备两套颜色 
          if ([ThemeManagement shareManagement].isDarkTheme) {             
                   self.view.backgroundColor = [UIColor grayColor];
          }else{ 
                  self.view.backgroundColor = [UIColor whiteColor]; 
          } 
          // 添加接收改变主题的通知 
          [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(changeTheme) name:@"ChangeTheme" object:nil];
     }
    
    // 接收到改变主题的通知后改变主题
    - (void)changeTheme{ 
          if ([ThemeManagement shareManagement].isDarkTheme) { 
                self.view.backgroundColor = [UIColor grayColor]; 
          }else{ 
                self.view.backgroundColor = [UIColor whiteColor]; 
         }
    }
    
    • 使用switch来控制白天/夜间模式
    // switch的值改变时
    - (IBAction)switchValueChanged:(UISwitch *)sender {
            if (sender.on == YES) { 
            // 夜间模式开启 
            [ThemeManagement shareManagement].isDarkTheme = YES; 
            }else{ 
            // 夜间模式关闭 
             [ThemeManagement shareManagement].isDarkTheme = NO; 
            } 
            // 发送通知 改变主题模式 
            [[NSNotificationCenter defaultCenter]postNotificationName:@"ChangeTheme" object:nil];
    }
    

    总结

    实际项目中使用夜间模式时肯定不是那么简单的,但是思路都是一样的(通知+单例或本地数据持久化),只不过是要准备两套主题颜色。

    相关文章

      网友评论

        本文标题:iOS开发中,实现夜间模式

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