LEETheme优雅的主题管理库

作者: 与伟大LEE同行 | 来源:发表于2016-06-10 11:41 被阅读1855次

前言

对于日间夜间模式切换 , 多种色调主题切换 , 这类的需求可以说在阅读社交类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 , 如果喜欢记得关注哦 亲 ~ 么了个哒 

相关文章

网友评论

  • 阿唯不知道:// tabBar标签颜色渲染(不知该如何调用Lee方法)
    UITabBarItem *item = [UITabBarItem appearance];
    // 未选中字体颜色
    [item setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor darkGrayColor],
    NSFontAttributeName:AAFont(11)
    }
    forState:UIControlStateNormal];
    // 选中字体颜色
    [item setTitleTextAttributes:@{NSForegroundColorAttributeName:kAppMainColor,
    NSFontAttributeName:AAFont(11)
    }
    forState:UIControlStateSelected];
  • 曾经像素有点低:这个json表一直看不明白是用来干什么的。是存储颜色、图片名字什么的吗?那么多皮肤下的一个icon,应该对应多个图片名字。就是存储也得一个key对应多个value吧。不太明白怎么用。。。
    曾经像素有点低:看了一下你github上的demo,秒懂!收藏了
    // 添加背景颜色
    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"]);
  • VVik:很不错的库,支持开源的奉献精神!
  • Hengry:如何动态切换按钮上的图片呢?
    Hengry:@与伟大LEE同行 UISegmentedControl 可以设置选择文字的颜色吗
    Hengry:@与伟大LEE同行 👌
    与伟大LEE同行:@DevHank .LeeAddButtonImage(@"tag", [UIImage imageNamed:@"true_day"], UIControlStateNormal)
    或者
    .LeeConfigButtonImage(@"ident", UIControlStateNormal);
  • 风之谷等风来:为开源点赞,真的很好
    风之谷等风来:@与伟大LEE同行 不用客气
    与伟大LEE同行:感谢支持
  • 492e423db474:大神你好,我想问下,如果是要改变全局的图标样式(包括按钮,tabbar,navgationbar 等等 类似于安卓手机主题那样的)该怎么实现啊? 有类似的demo吗?谢谢~~~
  • Hengry:这个库真的好用。我想添加一个全局的开关,控制是否开启或者关闭皮肤。这怎么实现呢?感觉这个开关挺实用的。
    与伟大LEE同行:@DevHank 这个你只要控制启用哪个主题就可以做到了吧
  • End_af9c:我在启动设置了 默认主题白天的, 然后点击切换夜间的,之后杀死程序,在进入 还是保持夜间模式的吗? 不应该是 启动的默认白天吗?
    End_af9c:@与伟大LEE同行 默认是这个意思理解啦 ! 这个跟腾讯新闻的也是一个意思 没点击切换的模式 不管退出杀死都保持着当前点击的模式! 谢谢了·挺好用的·继续关注
    与伟大LEE同行:@End_af9c 或者你当前启用的是一个新加的主题,当你把这个主题移除后,当前的主题已经不存在了,这时也会自动启用默认的主题
    与伟大LEE同行:@End_af9c 不是的,再进入会自动启动你上一次的主题。默认的主题不是这个意思的,举个例子,第一次启动程序,你还从未启用的一个主题,也不会知道上一次是什么,这时就会启用默认的那个主题
  • 迷路的安然和无恙:作者你好,我想参与你的SDKit开源组件库的工程,可以吗?
    迷路的安然和无恙:@与伟大LEE同行 :joy: 那好吧,有动静的时候叫上我哈,一起商量怎么干:stuck_out_tongue_closed_eyes:
    与伟大LEE同行:@as_one :cold_sweat:说来尴尬,那个是sdautolayout的作者发起的,不过后来因为大家工作太忙一直没什么进展了
  • xiaoyouPrince:以前在高少东的SDAutoLayout库中看到过LEETheme这个主题管理库,没想到在这又看到了,谢谢分享!
    与伟大LEE同行:@xiaoyouPrince 我这个demo没怎么写,所以直接在他的demo里面用了,哈哈
    与伟大LEE同行:@xiaoyouPrince :smile:
  • 7emini:我是LEE的吹箫童子~
    c45c75ce4a5f:@与伟大LEE同行 哈哈,太明显了。:blush:
    与伟大LEE同行:@JasonLeee 哈哈,你看出来了?
    c45c75ce4a5f:毛,你是 干瘪。
  • 418ac3f97e4b:LEE神,强,无敌!

本文标题:LEETheme优雅的主题管理库

本文链接:https://www.haomeiwen.com/subject/vqpjdttx.html