前言
暗黑模式適配主要是考慮三個部分
- 圖片適配
- 顏色適配
- 封裝基礎(chǔ)組件用來監(jiān)聽暗黑模式的變化
一绎狭、圖片適配
使用ImageSet
打開Assets.xcassets
-
新建一個Image set 選擇右邊欄的Appearances中對應(yīng)的選項適配深色模式莹痢。
image
使用方法:[UIImage imageNamed:@"circle"];
當(dāng)模式變化時,UIImage會動態(tài)的獲取對應(yīng)模式下的圖片資源
二、顏色適配
- 使用ColorSet
- 打開Assets.xcassets
-
新建一個Color set 選擇右邊欄的Appearances中對應(yīng)的選項適配深色模式匿辩。
image
- 使用方法:
self.view.backgroundColor = [UIColor colorNamed:@"testColor"]; - 同樣當(dāng)模式發(fā)生變化時,UIColor會動態(tài)的獲取對應(yīng)模式下的顏色
三束凑、封裝基礎(chǔ)組件用來監(jiān)聽暗黑模式的變化
監(jiān)聽暗黑模式的變化主要是封裝系統(tǒng)監(jiān)聽方法,主要分兩種監(jiān)聽,可以根據(jù)實際情況進(jìn)行選擇使用杠园。
(一)為NSObject對象添加監(jiān)聽回調(diào)
- 利用runtime為需要監(jiān)聽模式變化的obj對象添加一個監(jiān)聽模式變化的block回調(diào),回調(diào)參數(shù)返回當(dāng)前的模式標(biāo)記
- 把該obj對象加入NSHashTable表中弱持有該對象
- 提前用runtime替換系統(tǒng)traitCollectionDidChange:方法,在替換的方法中判斷當(dāng)前暗黑模式是否發(fā)生改變以及當(dāng)前的模式,然后在NSHashTable表中遍歷每一個保存的obj對象,并且調(diào)用第一步中為之添加的block回調(diào)
-
obj對象可以在block帶著模式參數(shù)回調(diào)回來后對obj對象進(jìn)行適配操作,如下:
image
(二)新建UIColor的分類監(jiān)聽模式的改變
-
建一個UIColor的分類,在分類中根據(jù)系統(tǒng)監(jiān)聽回調(diào)colorWithDynamicProvider:方法,進(jìn)行顏色匹配,如下:
image
-
使用時:
image