簡體   English   中英

如何在Yosemite中檢測暗模式以更改狀態欄菜單圖標

[英]How to detect dark mode in Yosemite to change the status bar menu icon

在Yosemite中啟用暗模式時,必須更改狀態欄應用程序圖標。 如何檢測是否啟用了暗模式? 是否有相同的通知?

是否更好地顯示另一個圖像或更改現有圖像的alpha值? 需要輸入哪個是更好的方法?

您應該盡可能使用模板圖像,因為它們允許您的UI自動適應系統所做的更改(至少在系統中沒有錯誤的時候...... http://indiestack.com/2014/10/yosemites -dark-mode / )。 但是,如果您可能在狀態欄中使用自定義視圖而無法利用模板圖像,則可以手動檢查暗模式並相應地調整UI。

您可以通過從用戶的全局首選項中檢索密鑰來檢查是否啟用了暗模式,如下所示:

NSDictionary *dict = [[NSUserDefaults standardUserDefaults] persistentDomainForName:NSGlobalDomain];
id style = [dict objectForKey:@"AppleInterfaceStyle"];
BOOL darkModeOn = ( style && [style isKindOfClass:[NSString class]] && NSOrderedSame == [style caseInsensitiveCompare:@"dark"] );

至少對於Yosemite的第一個版本,當禁用暗模式時鍵不存在,但是當啟用暗模式時,該鍵存在並返回字符串值@“Dark”。 我添加了不區分大小寫的比較,因為我看到偏好鍵在系統發布之間改變了它們的情況,這增加了一點保險。

要監視設置的當前狀態,請注冊為分布式通知的觀察者(在適當的方法中),如下所示:

[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(darkModeChanged:) name:@"AppleInterfaceThemeChangedNotification" object:nil];

並且您創建了一個方法來充當通知的消息選擇器,如下所示:

-(void)darkModeChanged:(NSNotification *)notif
{
    NSLog(@"Dark mode changed");
}

狀態欄圖標需要是模板圖像。 只需將setTemplate:Yes設置為NSImage即可。 當切換到黑暗模式時,應該應用活力。

正如bergdesign所述 ,您需要觀察系統范圍的通知並閱讀持久的全局域

我們制作了一個類來簡化對暗模式設置的處理更改: https//github.com/weAreYeah/WAYTheDarkSide

它變得像......一樣簡單

[WAYTheDarkSide welcomeApplicationWithBlock:^{
    // Enabling Dark Mode
    [someWindow setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]];
    [someVisualEffectView setMaterial:NSVisualEffectMaterialDark];

} immediately:YES];

[WAYTheDarkSide outcastApplicationWithBlock:^{
    // Disabling Dark Mode
    [someWindow setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantLight]];
    [someVisualEffectView setMaterial:NSVisualEffectMaterialLight];

} immediately:YES];

希望這可以幫助 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM