iOS开发——夜间模式的实现
2016-08-06 本文已影响2468人
Lol刀妹
少女时代 金泰妍
程序员不要只知道看代码,偶尔也要看看风景😊
先来看看效果图
夜间模式小demo思路
切换夜间/白天模式时,发送通知给所有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];
}
总结
实际项目中使用夜间模式时肯定不是那么简单的,但是思路都是一样的(通知+单例或本地数据持久化),只不过是要准备两套主题颜色。