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