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

SuperMairo發表於2018-11-15

專案程式碼放這裡,這個方案是從實際專案中剝離而來的,大家使用中遇到什麼問題或者有什麼賜教歡迎隨時留言~

Demo執行效果圖

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

使用方法非常簡單:

初始化:

[[SDThemeManager sharedInstance] setupThemeNameArray:@[@"SDTheme-White", @"SDTheme-Black"]];
複製程式碼

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

切換主題:

[[SDThemeManager sharedInstance] changeTheme:@"SDTheme-Black"];
複製程式碼

具體設定皮膚:

具體呼叫非常簡單,比如需要換膚的檢視控制元件原本是呼叫backgroundColor設定顏色,只需要換成呼叫擴充套件方法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等視覺化檢視也可以直接設定,例如:

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

如果直接設定屬性的方式不滿足需求,還可以自己監聽通知SDThemeChangedNotification,收到通知之後自行做顏色圖示等切換。

資源管理

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

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

Bundle 建立注意事項:

資源bundle不要直接新建資料夾之後改副檔名或者用Settings Bundle

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

推薦Bundle建立方式:

一個輕量級的iOS皮膚切換方案(內附Demo)
file->New->Target->macOS->Bundle

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

一個輕量級的iOS皮膚切換方案(內附Demo)
好,到現在Bundle就完成了

最後:

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

相關文章