2013-02-06 32 views
4

問題是,我的閱讀應用程序有一個按鈕,將其放入黑暗的主題模式。亮度降低10%。當用戶返回到正常模式時,它將被設置回記憶的亮度。但是與此同時,由於自動調節亮度,甚至用戶進入設置並改變設置,實際系統亮度可能會發生變化。當系統改變屏幕亮度時,iOS是否發送通知?

亮度屬性的問題是,您只能查詢實際的屏幕亮度,而您設置的任何內容只是暫時的,直到用戶鎖定屏幕。解鎖後系統恢復到系統亮度。

如果iOS會在系統更改亮度時發送通知,這會有所幫助。在文檔中找不到任何內容。

回答

6

搜索UIScreenBrightnessDidChangeNotification這是UIScreen類的一部分。它可以從iOS 5.0或更高版本獲得。

3

如果您想要在設備再次解鎖時將亮度設置回程序化值,請注意UIApplicationDidBecomeActiveNotification通知,並將亮度恢復到選擇器中的所需級別。

我已經做了這整個亮度東西多一些研究,這裏是我的發現:

UIScreenBrightnessDidChangeNotification被稱爲只有當系統的亮度發生變化時,或者當用戶改變從控制面板或設置亮度。不是當您以編程方式更改亮度時。

我從這個Apple Doc here(請參閱下文)中推測出,在您以編程方式設置亮度後,亮度不會再發生變化。

無論應用程序是否關閉,應用程序亮度更改都會一直有效,直到設備鎖定爲 。系統亮度 (用戶可在設置或控制中心中設置)在下次打開顯示器時恢復爲 。

但是我發現這不是真的(或者我誤解了它)。以編程方式設置亮度後,亮度確實會改變(並且UIScreenBrightnessDidChangeNotification確實會被調用)。然而,只有在系統認爲應該增加或降低亮度(由於環境亮度的變化)*時纔會調用它。如果環境的亮度保持不變,則屏幕將保持與編程設置一樣明亮的狀態。

這是什麼意思?好了,兩兩件事:

  • 如果你想保持亮度的設置它編程的水平,無論是環境的變化,你必須觀察UIScreenBrightnessDidChangeNotification和亮度復位到所需的級別每次被稱爲時間。
  • 如果您想回到「系統」亮度,那麼您無法真正做到,因爲如果發生環境變化,您根本無法分辨系統亮度會如何(因爲您每次都重置它) 。你有2個選擇。
    1. 在您以編程方式設置亮度並將其設置回該值之前記住亮度。或者
    2. 將亮度設置爲0.5並讓系統工作。

的「危險」在這兩種情況是,它會留在你設置它,直到檢測到環境亮度變化值。

*有2種特殊情況...當您將亮度設置爲0.0時,系統認爲應該降低亮度,因爲它已經在0.0以下,所以沒有任何反應。其次,當你將它設置爲1.0時,無論環境如何變化,它都將保持在1.0。

+0

感謝這裏的細節!根據您的回答,我們構建了一個小測試應用程序,並且可以確認我們獲得了相同的結果(在iPad Air 2和12.9英寸iPad Pro上進行了測試,均在iOS 9.3.2上進行測試),但有一點小例外:如果亮度被設置爲最大1.0,在隨後的環境光水平變化期間沒有發生變化(即使放置在黑暗的房間中,屏幕保持在1.0並且沒有按照其他方式預計的縮小)。在autobrightness設置關閉並重新開啓後或者手動調節亮度後,Autobrightness纔會重新啓用。 – Becca

+0

坦克Becca。我相應地更新了我的答案(改變了關於'特殊'情況的最後一段。 – guido