前言
对于日间夜间模式切换 , 多种色调主题切换 , 这类的需求可以说在阅读社交类APP中屡见不鲜了 , 但如何能更方便的实现这一需求呢? 不要说给每个自定义的view神马的加个通知 然后在通知事件里设置各种属性的颜色图片等等 , NO , 那不是一个好的Coder该做的事 , 我们应该追求用最简单的方式去完成最繁琐的事 , 正是出于这些原因 , 我开发了这个主题管理库 今天开源出来分享给大家 ----- LEETheme
LEETheme
什么是LEETheme ? 它是一个轻量级主题管理开源库 , 完美的适配系统版本差异 , 拥有良好的兼容性 , 任何对象都可以支持 , 优雅的使用方式 , 相比传统多主题处理方式而言 , LEETheme 只需一句代码 即可完成对象多样式的操作.
效果演示
朋友圈Demo演示使用方法
LEETheme 提供了两种设置方式 这里做一下简单的演示:
独立设置方式
独立设置方式是对某一对象属性进行单独的配置 , 例如下面的例子 , 对view对象添加背景颜色 其中传入了2个参数 (@"主题标签" , [该主题标签对应的color值])
self.view.lee_theme.LeeAddBackgroundColor(DAY , [UIColor whiteColor]).LeeAddBackgroundColor(NIGHT , [UIColor blackColor]);
增加换行后 格式更加清晰
self.view.lee_theme
.LeeAddBackgroundColor(DAY , [UIColor whiteColor])
.LeeAddBackgroundColor(NIGHT , [UIColor blackColor]);
标识符设置方式
标识符设置方式是通过添加不同主题的JSON配置信息再为某对象设置指定标识符来实现切换的 , 下面模拟个例子:
json的标准格式:
{
"color": {
"identifier1(唯一标识符)": "十六进制颜色值",
"identifier2": "#000000"
},
"image": {
"identifier3(唯一标识符)": "图片名称",
"identifier4": "lee.png"
}
}
我有这样的两个json:
{
"color": {
"backgroundcolor": "#F0F0F0",
"textcolor": "#000000"
},
"image": {
"ident1": "lee.jpg",
"ident2": "lee帅.png"
}
}
第二个json:
{
"color": {
"backgroundcolor": "#000000",
"textcolor": "#808080"
},
"image": {
"ident1": "我爱LEE.jpg",
"ident2": "LEE爱我.jpg"
}
}
下面我们分别调用添加json的方法来讲这2个json添加给LEETheme:
//添加json设置数据 , 设置主题标签 , 设置资源路径(如果资源路径为nil 默认会在mainBundle中查询所需资源)
[LEETheme addThemeConfigWithJson:第一个json Tag:@"day" ResourcesPath:nil];
[LEETheme addThemeConfigWithJson:第二个json Tag:@"night" ResourcesPath:nil];
通过上面的代码可以很清楚的看出 , 我添加了一个json , 并设置主题标签为@"day" 那么也就是说第一个json 它对应的就是@"day"标签主题的配置信息 , 多主题情况依次类推.
添加好JSON的配置信息后 , 接下来我们只要为需要根据主题变化的对象设置标识符就可以了:
//设置背景颜色的标识符 , 这个标识符和你的json文件中配置的标识符对应
self.view.lee_theme.LeeConfigBackgroundColor(@"backgroundcolor");
这样只要为这些对象设置好对应的属性的标识符 , 那么当主题变换的时候 它就会自动根据相应主题JSON中的标识符的值进行设置.
切换主题
切换主题非常简单 只需要调用下面的方法 传入你要启用的主题的标签就可以了.
//启用主题
[LEETheme startTheme:@"day"];
这里建议使用时在didFinishLaunchingWithOptions
代理方法中设置一下默认主题 , 这样在APP第一次开启时启用默认主题.
//设置默认主题
[LEETheme defaultTheme:@"day"];
当然如果你重新打开APP , 那么LEETheme会自动启用上一次使用的主题.
总结
LEETheme是一个非常实用的主题管理库 , 总共只有2个文件 , 它所提供的两种不同设置方式可以满足绝大部分Coder的需求 , 可以很方便的实现多主题切换操作 , 当然不仅可以实现本地固定的主题样式切换 , 利用标识符设置方式也可以实现网络主题切换的功能 , 具体详细的使用示例我会在demo中逐一体现 , 除了强大功能外 所采用的链式语法还让你的代码更加优雅 , 好了 , 今天就介绍到这里 , 更多详细的使用示例请灰到Github上查看.
我是LEE , 一枚有信仰的果粉Coder , 如果喜欢记得关注哦 亲 ~ 么了个哒
网友评论
UITabBarItem *item = [UITabBarItem appearance];
// 未选中字体颜色
[item setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor darkGrayColor],
NSFontAttributeName:AAFont(11)
}
forState:UIControlStateNormal];
// 选中字体颜色
[item setTitleTextAttributes:@{NSForegroundColorAttributeName:kAppMainColor,
NSFontAttributeName:AAFont(11)
}
forState:UIControlStateSelected];
// 添加背景颜色
imageView.lee_theme
.LeeAddBackgroundColor(@"red" , [UIColor redColor])
.LeeAddBackgroundColor(@"blue" , [UIColor blueColor]);
// 添加图片
imageView.lee_theme
.LeeAddImage(@"red" , [UIImage imageNamed:@"red.png"])
.LeeAddImage(@"blue" , [UIImage imageNamed:@"blue.png"]);
或者
.LeeConfigButtonImage(@"ident", UIControlStateNormal);