思路:
一:
1.準(zhǔn)備兩套資源,分別對應(yīng)日間模式和夜間模式。
2.在系統(tǒng)全局保存一個變量(BOOL isNight),根據(jù)用戶的操作改變這個變量的值;
3.把每個需要被改變的view, viewcontroller加入通知中心中監(jiān)聽(NeedTransferToNight和NeedTransferToDay)事件;
4.默認(rèn)為日間模式,isNight = YES.
5. 當(dāng)用戶點擊夜間按鈕時,如果isNight == YES, 講此變量的值置為NO,通知中心發(fā)布NeedTransferToNight通知,所有需要被改變的view和viewcontroller在監(jiān)聽到此事 件時使用夜間資源重新繪制自身。其他view在初始化時如果發(fā)現(xiàn)isNight為YES.則使用夜間資源初始化自身。(反之亦然)
6.運行程序,可以看到夜間模式。
二:
寫一個父類view,使夜間模式需改變的view都繼承于他,父類view暴露出設(shè)置夜間模式相關(guān)參數(shù)的接口,如背景顏色,字體顏色,前景色等
準(zhǔn)備兩套UI圖,相當(dāng)于設(shè)置主題
一般都是準(zhǔn)備兩套UI的,一套UI 只通過改變背景顏色,太難看了;通過通知,切換UI的同時,改變背景顏色。
你可以把夜間模式看成是應(yīng)用另外的一個主題。
可以設(shè)計一個主題管理器(單一實例),所有用到有關(guān)顏色,字體,圖片,都由主題管理器統(tǒng)一管理。
優(yōu)化切換UI圖:
像2倍的高清圖一樣命名,每個圖做兩套????bg_night.png?? bg_white.png,取圖的時候動態(tài)判斷
寫一個工具類方法來判斷是否是夜間模式,從而動態(tài)獲取UI圖的名稱