一个轻量级的iOS皮肤切换方案(内附Demo)

点击上方“程序员大咖”,选择“置顶公众号”

关键时刻,第一时间送达!640?640?wx_fmt=gif

640?wx_fmt=jpeg


项目代码放在https://github.com/SlashDevelopers/SDTheme,这个方案是从实际项目中剥离而来的,大家使用中遇到什么问题或者有什么赐教欢迎随时留言~


640?wx_fmt=gif

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等可视化视图也可以直接设置,例如:


640?wx_fmt=png


如果直接设置属性的方式不满足需求,还可以自己监听通知SDThemeChangedNotification,收到通知之后自行做颜色图标等切换。


资源管理


颜色字符串和图片是放在单独的Bundle里面进行管理的,所以刚开始要新建自己的主题Bundle.
Bundle中 新建
ColorsMap.plistImages.xcassets


  • 图片:就放在相应的主题bundle中的Images.xcassets管理,图片在不同主题下名字要保证一致。

  • 颜色字符串:颜色字符串可以参考一下Demo中的文件,首先要有一个大分类,例如Demo中的block、text、line(跟随自己需要分类就好,这里的分类我是扒竞品富途牛牛

猜你喜欢

转载自blog.csdn.net/px01ih8/article/details/80971175