4
我想要控制Mac OS X應用程序(如F1/F2按鈕)中主屏幕的亮度。在iOS中,有這樣的事情:在Mac OS X應用程序中調整屏幕亮度
UIScreen.mainScreen().brightness = CGFloat(0.5)
在OSX我們NSScreen,這是很好的找出主畫面是什麼,但它忽略了.brightness
方法。
那麼如何在OSX上使用Swift調整顯示器亮度?
我想要控制Mac OS X應用程序(如F1/F2按鈕)中主屏幕的亮度。在iOS中,有這樣的事情:在Mac OS X應用程序中調整屏幕亮度
UIScreen.mainScreen().brightness = CGFloat(0.5)
在OSX我們NSScreen,這是很好的找出主畫面是什麼,但它忽略了.brightness
方法。
那麼如何在OSX上使用Swift調整顯示器亮度?
有在OS X這樣做沒有這麼好的API
我們必須使用IOServiceGetMatchingServices
找到"IODisplayConnect"
(顯示設備),然後使用kIODisplayBrightnessKey
設置亮度:
func setBrightnessLevel(level: Float) {
var iterator: io_iterator_t = 0
if IOServiceGetMatchingServices(kIOMasterPortDefault, IOServiceMatching("IODisplayConnect"), &iterator) == kIOReturnSuccess {
var service: io_object_t = 1
while service != 0 {
service = IOIteratorNext(iterator)
IODisplaySetFloatParameter(service, 0, kIODisplayBrightnessKey, level)
IOObjectRelease(service)
}
}
}
setBrightnessLevel(0.5)
偉大的解決方案, 謝謝!使用內置顯示屏在我的MacBook上工作得很好。你能不能請給我一個提示如何控制外部顯示器的亮度,比如CinemaDisplay?這是我必須匹配的另一個IOService嗎?我在Apple Docs中找不到任何幫助。 – ixany
因爲我們正在交付匹配「IODisplayConnect」的服務,我認爲它可以用於內部和外部顯示器(它應該適用於實際發現的所有顯示器)。如果它不適合你,我會進一步檢查。 *請注意,某些外部顯示器無法通過OS X以編程方式安裝。* – Moritz
我使用實際的MacBookPro(帶有最新的OSX 10.11 Beta)和通過DisplayPort/Thunderbold連接的Apple Thunderbold Display進行了測試。內置顯示屏反應,但Thunderbold-Display沒有。 'NSScreen.screens()'正確返回兩個顯示。感謝您的支持:) – ixany