今天在改一个项目时候,需要适配在OS X 10.10以上的系统中新加入的深灰色菜单栏和Dock这一变化, 需要判断系统是否处于Dark模式下,但是在一般情况下,应该使用模板图像,因为它们允许用户界面自动适应系统所做的更改(至少当系统中没有错误时… 参考: Yosemite’s Dark Mode)。但状态栏中使用自定义视图的情况下,不能利用模板图像,所以我需要手动检查暗模式,并相应地调整调用的图片。
检查Dark模式的代码如下:
NSDictionary *dict = [[NSUserDefaults standardUserDefaults] persistentDomainForName:NSGlobalDomain];
id style = [dict objectForKey:@"AppleInterfaceStyle"];
BOOL darkModeOn = ( style && [style isKindOfClass:[NSString class]] && NSOrderedSame == [style caseInsensitiveCompare:@"dark"]);
这样,通过darkModelOn的值就可以知道是否开启了Dark模式。
当然我们还可以设置一个通知,动态的来改变我们需要调用的图片。通知如下所示:
[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(darkModeChanged:) name:@"AppleInterfaceThemeChangedNotification" object:nil];
然后就可以执行需要调用的逻辑了,如下:
-(void)darkModeChanged:(NSNotification *)notif {
NSLog(@"Dark mode changed");
}