最近希望给自己的APP中加入夜间模式这一选项,经过学习使用单例模式实现了day or night的切换,很简单的代码,欢迎大家学习。
1、(1)创建单例,继承NSObject
@interface LXChangeDayAndNight : NSObject
//创建Bool类型的Style来获得是否是夜间模式状态
@property (nonatomic,assign) BOOL style;
+ (LXChangeDayAndNight *)changeDayAndNight;
@end
(2)初始化单例
+ (LXChangeDayAndNight *)changeDayAndNight
{
static LXChangeDayAndNight *change = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
change = [[self alloc]init];
});
return change;
}
//创建一个Switch控件,切换白天和夜间模式
UISwitch *dayOrNightSwitch = [[UISwitch alloc]initWithFrame:CGRectMake(100, 100, 100, 50)];
self.dayOrNightSwitch = dayOrNightSwitch;
[dayOrNightSwitch addTarget:self action:@selector(judgeDayOrNight) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:dayOrNightSwitch];
- (void)judgeDayOrNight
{
LXChangeDayAndNight *change = [LXChangeDayAndNight changeDayAndNight];
if (self.dayOrNightSwitch.on) {
//到这一行,单例change的style属性被赋值,其他控制器可以直接从单例中取值
change.style = YES;
self.view.backgroundColor = [UIColor blackColor];
NSLog(@"%d",change.style);
}else{
change.style = NO;
self.view.backgroundColor = [UIColor whiteColor];
NSLog(@"%d",change.style);
}
}
//创建按钮push到另一个controller
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.backgroundColor = [UIColor purpleColor];
btn.frame = CGRectMake(100,300, 100, 100);
//push操作
[btn addTarget:self action:@selector(push) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
//因为在上面的控制器中已经创建了单例对象,所以在second控制器中再次调用这个单例的时候会直接return change的状态
LXChangeDayAndNight *change = [LXChangeDayAndNight changeDayAndNight];
self.style = change.style;
if (self.style) {
self.view.backgroundColor = [UIColor blackColor];
}else{
self.view.backgroundColor = [UIColor whiteColor];
}
}
代码比较简单,有不懂得地方可以咨询我。通过学习深知自己对于单例的理解还远远不够,今后的学习中还要继续努力、