Demo:https://gitee.com/HanZhiLi/ios_night_mode
效果图1.OC简单实现
1.创建一个theme的NSObject(设置全句需要调用的颜色,单例)
2.分别创建UIView,UITabBar,UINavigationBar,UILabel分类(category),如果有其他控价需要可以创建,因为思路是一样,所以只展示UIView
2.1 主要是用NSNotificationCenter来监听修改全局的
.h
.m
indexViewController.m设置
1.- (void)viewDidLoad {
[super viewDidLoad];
[self.label themeTextType:0];
}
2.- (IBAction)switch:(UISwitch*)sender {
if(sender.on){
[theme shareTheme].appColor = 1; [[NSNotificationCenter defaultCenter] postNotificationName:@"changeColor" object:nil];
}else{
[theme shareTheme].appColor = 0; [[NSNotificationCenter defaultCenter] postNotificationName:@"changeColor" object:nil];
}
}
2.swift实现
1.swift和OC的思路差不多都是用NSNotificationCenter来监听修改全局的,只不过语法差别比较大
2.说一下语法的差别,详情看demo:https://gitee.com/HanZhiLi/ios_night_mode
set get
1.extension就是themeUIView私有方法 相当于OC里面的Category
2.#selector是调用私有方法,私有方法必须是@objc
3. 在Swift中,我们用var来定义变量,但Swfit中并不会自动给变量赋初始值。 所以如果使用未赋值的变量就会报错。 "?”表示可选类型(Optionals) 就是将已存在的某种类型(结构体、枚举、类)定义为可选类型,表示该“新”类型的值可以为空nil “!”表示告诉系统,“我肯定这个可选属性有值,强制取出来用”(强制解包),但是,如果这个可选类型属性当时的值为nil,那么会crash
网友评论