2015-08-25 47 views
1

我正在swift中創建OS X的代理應用程序(僅顯示菜單欄中的應用程序圖標)。我正在使用AppDelegate加載App的圖標:如何讀取Xcode中的OS X菜單欄的用戶選擇(Swift)

statusItem.image = NSImage(named: "BlackIcon") 

它工作正常。

但是,如果用戶選擇使用系統偏好設置 - >常規中的黑色菜單欄,用戶將看不到該圖標,因爲它是黑色的。

enter image description here

所以我需要顯示不同的「WhiteIcon」給用戶,如果他們有選擇的選項。

如何從我的應用程序中檢查用戶是否有此選項?

回答

0

看起來您正試圖爲暗模式反轉菜單圖標顏色。默認情況下,OSX會處理darkmore並反轉圖像顏色,但是如果它已經不適合,您需要專門添加[image setTemplate:YES]來爲您工作。

的Objective-C:

self.statusItem = [[NSStatusBar systemStatusBar]  
statusItemWithLength:NSSquareStatusItemLength]; 
NSImage *image = [NSImage imageNamed:@"statusItemIcon"]; 
[image setTemplate:YES]; 
[self.statusItem setImage:image]; 

迅速:(在下面鏈接由志韋才最初回答)

var isDark = false 

func isDarkMode() { 
isDark = NSAppearance.currentAppearance().name.hasPrefix("NSAppearanceNameVibrantDark") 
} 

override func drawRect(dirtyRect: NSRect) { 
super.drawRect(dirtyRect) 
isDarkMode() 
// Now use "isDark" to determine the drawing colour. 
if isDark { 
    // ... 
} else { 
    // ... 
} 
} 

這個答案解釋它在細節:NSStatusItem change image for dark tint

3

隨着Swift 3.0,您可以使用UserDefaults訪問macOS外觀或「AppleInterfaceStyle」,使用以下代碼:

let mode = UserDefaults.standard.string(forKey: "AppleInterfaceStyle") 

如果用戶啓用了暗模式,則默認值將返回一個字符串「Dark」。如果他們啓用了「燈光模式」,它將返回零。所以,你需要包裝,在下面的代碼:

if UserDefaults.standard.string(forKey: "AppleInterfaceStyle") == "Dark" { 
    statusItem.image = NSImage(named: "WhiteIcon") 
} else { 
    statusItem.image = NSImage(named: "BlackIcon") 
} 

我敢肯定,有可能是一個更清潔的方式,也許有保護,但你需要在雨燕3.0

,將讓你

編輯:

上述代碼將確定用戶當前的「模式」。但是,使用簡單的用戶首選項檢查不會導致正確的行爲(例如,它只會在應用程序啓動時觸發)。

執行此操作的正確方法是將菜單圖標設置爲黑色圖標。然後,瀏覽到資產目錄中的資產,然後選擇菜單圖標。選擇該菜單後,瀏覽到屬性檢查器,並確保使用「Mac」設備檢查圖像。然後選擇「渲染爲」設置爲「模板圖像」。

這隻需要你有一個黑色的圖標,macOS會處理圖像從黑暗模式到光照模式的轉換。

Image Attributes Inspector

相關問題