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

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

Demo運(yùn)行效果圖

Demo做的有點(diǎn)丑,大家多忍耐一下??

使用方法非常簡單:

初始化:

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

SDTheme-WhiteSDTheme-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.plistImages.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)各位看官多多指教~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末菇晃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蚓挤,更是在濱河造成了極大的恐慌磺送,老刑警劉巖剩失,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異册着,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)脾歧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門甲捏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鞭执,你說我怎么就攤上這事司顿。” “怎么了兄纺?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵大溜,是天一觀的道長。 經(jīng)常有香客問我估脆,道長钦奋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任疙赠,我火速辦了婚禮付材,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘圃阳。我一直安慰自己厌衔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布捍岳。 她就那樣靜靜地躺著富寿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锣夹。 梳的紋絲不亂的頭發(fā)上页徐,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音晕城,去河邊找鬼泞坦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛砖顷,可吹牛的內(nèi)容都是我干的贰锁。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼滤蝠,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼豌熄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起物咳,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤锣险,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芯肤,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巷折,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了崖咨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锻拘。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖击蹲,靈堂內(nèi)的尸體忽然破棺而出署拟,到底是詐尸還是另有隱情,我是刑警寧澤歌豺,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布推穷,位于F島的核電站,受9級(jí)特大地震影響类咧,放射性物質(zhì)發(fā)生泄漏馒铃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一轮听、第九天 我趴在偏房一處隱蔽的房頂上張望骗露。 院中可真熱鬧,春花似錦血巍、人聲如沸萧锉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柿隙。三九已至,卻和暖如春鲫凶,著一層夾襖步出監(jiān)牢的瞬間禀崖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工螟炫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留波附,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓昼钻,卻偏偏與公主長得像掸屡,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子然评,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1仅财、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明先生_x閱讀 15,968評(píng)論 3 119
  • 原文: 夫天地者,萬物之逆旅碗淌;光陰者盏求,百代之過客抖锥。而浮生若夢(mèng),為歡幾何碎罚?古人秉燭夜游磅废,良有以也。況陽春召我以煙景荆烈,...
    悅悅愛吃魚閱讀 343評(píng)論 0 0
  • 最近你有些感傷 我問你怎么了 你還是沉默不語 我知道 你一直都是這個(gè)樣子 我抱著對(duì)你愛的態(tài)度还蹲,幻想著一切美好的開始...
    皆非_lx閱讀 344評(píng)論 0 2
  • 積極心理學(xué) 當(dāng)你考入哈佛之后,你是否會(huì)開心很久耙考?答案是肯定的,但是六個(gè)月之后潭兽,一年之后呢倦始?你會(huì)因?yàn)槠谀┛荚嚕撐目?..
    人言白一閱讀 288評(píng)論 0 0
  • 1.基本構(gòu)造函數(shù) 2.set方法 3.使用SetPath()構(gòu)造不規(guī)則區(qū)域 boolean setPath (Pa...
    山嶺巨人郭敬明閱讀 1,988評(píng)論 0 3