App 多區域皮膚(主題)的實現

lvpengwei發表於2019-03-31

LVThemeKit

需求

App 裡可以皮膚化的 UI 區域分為 3 塊(App 皮膚/閱讀器主題/其他),這 3 塊又和黑夜模式有重疊。

  • App 皮膚區域有首頁 4 個 tab bar 頁面(還沒有實現主題化,在規劃中)
  • 閱讀器主題區域主要是閱讀器相關的設定和選單頁面
  • 其他指不需要主題化的區域

App 多區域皮膚(主題)的實現

第一種方案

主要思路就是給 UIKit 的 Category 增加一些屬性,配置每一類主題的 key,在第一次賦值或者收到主題改變的通知時進行 apply。

App 多區域皮膚(主題)的實現
App 多區域皮膚(主題)的實現

qd 是黑夜模式字首,readerTheme 是閱讀器主題字首

這種方案的問題是

  • 如果要增加一類主題(比如 App 皮膚類),需要把所有之前增加的屬性都 copy 一下(包括 apply 部分的程式碼),工作量很大。
  • 如果要增加一個新的屬性,需要新增多遍(字首分別是qd/readerTheme/app)。

重構之後的方案

藉助 OC 的泛型和 KVC 的一次重構

App 多區域皮膚(主題)的實現
App 多區域皮膚(主題)的實現

重構前後對比

App 多區域皮膚(主題)的實現

程式碼實現樣例:LVThemeKit

相關文章