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

LVThemeKit

需求

App 裏能夠皮膚化的 UI 區域分爲 3 塊(App 皮膚/閱讀器主題/其餘),這 3 塊又和黑夜模式有重疊。git

  • App 皮膚區域有首頁 4 個 tab bar 頁面(尚未實現主題化,在規劃中)
  • 閱讀器主題區域主要是閱讀器相關的設置和菜單頁面
  • 其餘指不須要主題化的區域

第一種方案

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

qd 是黑夜模式前綴,readerTheme 是閱讀器主題前綴app

這種方案的問題是3d

  • 若是要增長一類主題(好比 App 皮膚類),須要把全部以前增長的屬性都 copy 一下(包括 apply 部分的代碼),工做量很大。
  • 若是要增長一個新的屬性,須要添加多遍(前綴分別是qd/readerTheme/app)。

重構以後的方案

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

重構先後對比

代碼實現樣例:LVThemeKitblog

相關文章
相關標籤/搜索