一個輕量級的iOS皮膚切換方案(內(nèi)附Demo)

項目代碼放在https://github.com/SlashDevelopers/SDTheme,這個方案是從實際項目中剝離而來的,大家使用中遇到什么問題或者有什么賜教歡迎隨時留言~

Demo運行效果圖

Demo做的有點丑,大家多忍耐一下??

使用方法非常簡單:

初始化:

[[SDThemeManager sharedInstance] setupThemeNameArray:@[@"SDTheme-White", @"SDTheme-Black"]];

SDTheme-WhiteSDTheme-Black是資源主題Bundle的名稱,下面會說到資源Bundle的引入方法。

切換主題:

[[SDThemeManager sharedInstance] changeTheme:@"SDTheme-Black"];

具體設(shè)置皮膚:

具體調(diào)用非常簡單,比如需要換膚的視圖控件原本是調(diào)用backgroundColor設(shè)置顏色,只需要換成調(diào)用擴展方法theme_backgroundColor即可,例如:

self.view.theme_backgroundColor = @"block_bg";
self.textField.theme_textColor = @"text_h1";
self.image.theme_image = @"icon_face";

富文本需要用SDThemeForegroundColorAttributeName替換NSForegroundColorAttributeName,例如:

navBar.theme_titleTextAttributes = @{SDThemeForegroundColorAttributeName:@"text_h1"};

另外有些常用的屬性在XIB等可視化視圖也可以直接設(shè)置,例如:


如果直接設(shè)置屬性的方式不滿足需求,還可以自己監(jiān)聽通知SDThemeChangedNotification,收到通知之后自行做顏色圖標等切換。

資源管理

顏色字符串和圖片是放在單獨的Bundle里面進行管理的,所以剛開始要新建自己的主題Bundle.
Bundle中 新建ColorsMap.plistImages.xcassets

  • 圖片:就放在相應(yīng)的主題bundle中的Images.xcassets管理,圖片在不同主題下名字要保證一致。
  • 顏色字符串:顏色字符串可以參考一下Demo中的文件,首先要有一個大分類,例如Demo中的block、text、line(跟隨自己需要分類就好,這里的分類我是扒競品富途牛牛的??),如果你有一個分類叫SomeThing,那分類下內(nèi)容命名要帶上相應(yīng)的前綴SomeThing_,不然會報找不到,color string是HEX 或者AHEX格式。

Bundle 創(chuàng)建注意事項:

資源bundle不要直接新建文件夾之后改擴展名或者用Settings Bundle

推薦Bundle創(chuàng)建方式:


file->New->Target->macOS->Bundle

創(chuàng)建完成之后,對
Base SDK 設(shè)置為 iOS
Build Active Architecture Only 設(shè)置為 "YES"
Installation Directory 刪除掉后面的路徑
Code Signing Identity 選擇 Don't Code Sign
iOS Deployment Target 設(shè)置為 合適的版本
Skip Install 設(shè)置為 "NO"
Strip Debug Symbols During Copy 設(shè)置為 "YES"
COMBINE_HIDPI_IMAGES 設(shè)置為 "NO"
再設(shè)置一下依賴


好,到現(xiàn)在Bundle就完成了

主要實現(xiàn)原理:

其實實現(xiàn)原理也是非常簡單的,我這里拿UIView舉例子:

@interface UIView (SDTheme)

@property (nonatomic, copy) NSString *theme_backgroundColor;
@property (nonatomic, copy) IBInspectable NSString *sd_background;
@property (nonatomic, copy) NSString *theme_tintColor;

@en

這是針對UIView提供的擴展,大家可以看到其中有換膚屬性theme_backgroundColor,如下圖,我們在屬性theme_backgroundColorSetter方法中有根據(jù)主題配置調(diào)用系統(tǒng)的相應(yīng)方法,然后對控件注冊監(jiān)聽,等切換主題之后就會收到通知,然后執(zhí)行theme_didChanged方法,為控件設(shè)置正確的主題UI,that’s all~

Mac工具

另外同事寫了一個Mac小工具也順便分享一下,找一些顏色的時候會提高一些效率。

工具圖

使用的時候只要把對應(yīng)的ColorMaps拖進框即可,可能第一次需要輸入密碼,是因為對文件執(zhí)行了一個chmod 777的命令,目前只支持兩個,代碼在這里,有大佬有興趣的歡迎擴展,歡迎RP。

  • 雙擊Cell 可以快速拿到對應(yīng)顏色的key到剪貼板,直接Ctrl+V到項目代碼中即可。
  • 在菜單欄-Eidt->Add Color 可以快捷添加顏色

成品可以在這里直接下載到

最后:

倉庫地址:https://github.com/SlashDevelopers/SDTheme,???如果覺得本倉庫對您有幫助,請不要吝嗇你的?,感謝你的支持!???
使用中如果有任何疑問歡迎隨時留言,還請各位看官多多指教~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,171評論 3 119
  • 原文: 夫天地者,萬物之逆旅;光陰者,百代之過客。而浮生若夢,為歡幾何?古人秉燭夜游,良有以也。況陽春召我以煙景,...
    悅悅愛吃魚閱讀 403評論 0 0
  • 最近你有些感傷 我問你怎么了 你還是沉默不語 我知道 你一直都是這個樣子 我抱著對你愛的態(tài)度,幻想著一切美好的開始...
    皆非_lx閱讀 392評論 0 2
  • 積極心理學(xué) 當(dāng)你考入哈佛之后,你是否會開心很久?答案是肯定的,但是六個月之后,一年之后呢?你會因為期末考試,論文考...
    人言白一閱讀 324評論 0 0
  • 1.基本構(gòu)造函數(shù) 2.set方法 3.使用SetPath()構(gòu)造不規(guī)則區(qū)域 boolean setPath (Pa...
    山嶺巨人郭敬明閱讀 2,134評論 0 3

友情鏈接更多精彩內(nèi)容