項(xiàng)目代碼放在https://github.com/SlashDevelopers/SDTheme呻征,這個(gè)方案是從實(shí)際項(xiàng)目中剝離而來的,大家使用中遇到什么問題或者有什么賜教歡迎隨時(shí)留言~
Demo做的有點(diǎn)丑,大家多忍耐一下??
使用方法非常簡單:
初始化:
[[SDThemeManager sharedInstance] setupThemeNameArray:@[@"SDTheme-White", @"SDTheme-Black"]];
SDTheme-White
和SDTheme-Black
是資源主題Bundle的名稱恩袱,下面會(huì)說到資源Bundle的引入方法快鱼。
切換主題:
[[SDThemeManager sharedInstance] changeTheme:@"SDTheme-Black"];
具體設(shè)置皮膚:
具體調(diào)用非常簡單,比如需要換膚的視圖控件原本是調(diào)用backgroundColor
設(shè)置顏色曙博,只需要換成調(diào)用擴(kuò)展方法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
,收到通知之后自行做顏色圖標(biāo)等切換惠窄。
資源管理
顏色字符串和圖片是放在單獨(dú)的Bundle里面進(jìn)行管理的蒸眠,所以剛開始要新建自己的主題Bundle.
Bundle中 新建ColorsMap.plist
和Images.xcassets
- 圖片:就放在相應(yīng)的主題bundle中的Images.xcassets管理,圖片在不同主題下名字要保證一致杆融。
- 顏色字符串:顏色字符串可以參考一下Demo中的文件楞卡,首先要有一個(gè)大分類,例如Demo中的
block、text蒋腮、line
(跟隨自己需要分類就好淘捡,這里的分類我是扒競品富途牛牛
的??),如果你有一個(gè)分類叫SomeThing
池摧,那分類下內(nèi)容命名要帶上相應(yīng)的前綴SomeThing_
焦除,不然會(huì)報(bào)找不到,color string
是HEX 或者AHEX格式作彤。
Bundle 創(chuàng)建注意事項(xiàng):
資源bundle不要直接新建文件夾之后改擴(kuò)展名或者用Settings Bundle
推薦Bundle創(chuàng)建方式:
file
->New
->Target
->macOS
->Bundle
創(chuàng)建完成之后膘魄,對(duì)
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就完成了
主要實(shí)現(xiàn)原理:
其實(shí)實(shí)現(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
這是針對(duì)UIView提供的擴(kuò)展瓣距,大家可以看到其中有換膚屬性theme_backgroundColor
,如下圖代咸,我們?cè)趯傩?code>theme_backgroundColor的Setter
方法中有根據(jù)主題配置調(diào)用系統(tǒng)的相應(yīng)方法蹈丸,然后對(duì)控件注冊(cè)監(jiān)聽,等切換主題之后就會(huì)收到通知呐芥,然后執(zhí)行theme_didChanged
方法逻杖,為控件設(shè)置正確的主題UI,that’s all~
Mac工具
另外同事寫了一個(gè)Mac小工具也順便分享一下思瘟,找一些顏色的時(shí)候會(huì)提高一些效率荸百。
使用的時(shí)候只要把對(duì)應(yīng)的ColorMaps拖進(jìn)框即可,可能第一次需要輸入密碼滨攻,是因?yàn)閷?duì)文件執(zhí)行了一個(gè)chmod 777
的命令够话,目前只支持兩個(gè),代碼在這里光绕,有大佬有興趣的歡迎擴(kuò)展女嘲,歡迎RP。
- 雙擊Cell 可以快速拿到對(duì)應(yīng)顏色的key到剪貼板诞帐,直接
Ctrl+V
到項(xiàng)目代碼中即可欣尼。 - 在菜單欄-Eidt->Add Color 可以快捷添加顏色
最后:
倉庫地址:https://github.com/SlashDevelopers/SDTheme,???如果覺得本倉庫對(duì)您有幫助停蕉,請(qǐng)不要吝嗇你的?愕鼓,感謝你的支持!???
使用中如果有任何疑問歡迎隨時(shí)留言慧起,還請(qǐng)各位看官多多指教~