技术第三方库收集集思广益

iOS开发——夜间模式的实现

2016-08-06  本文已影响2468人  Lol刀妹
少女时代 金泰妍 程序员不要只知道看代码,偶尔也要看看风景😊

先来看看效果图

夜间模式小demo

思路

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

开始实现夜间模式

#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;
}
- (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的值改变时
- (IBAction)switchValueChanged:(UISwitch *)sender {
    if (sender.on == YES) {
        // 夜间模式开启
        [ThemeManagement shareManagement].isDarkTheme = YES;
    }else{
        // 夜间模式关闭
        [ThemeManagement shareManagement].isDarkTheme = NO;
    }
    // 发送通知 改变主题模式
    [[NSNotificationCenter defaultCenter]postNotificationName:@"ChangeTheme" object:nil];
}

总结

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

上一篇下一篇

猜你喜欢

热点阅读