优雅的主题管理库- 一行代码完成多样式切换
主要适用于固定主题样式的情况下使用
优点:直观 清晰, 编码时可随初始化控件编写完成, 不影响编码思路.
缺点:每个主题的设置固定, 不支持新主题的设置.
// 添加背景颜色
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"]);
// 添加自定义设置 (每个主题标签对应一个block , 当触发其中添加的主题后会执行相应的block)
imageView.lee_theme
.LeeAddCustomConfig(@"red" , ^(UIImageView *item){
item.hidden = YES; //简单举例 红色主题启动时 将这个imageview对象隐藏
})
.LeeAddCustomConfig(@"blue" , ^(UIImageView *item){
item.hidden = NO; //或者随便做一些其他羞羞的事
});
LEETheme支持对任何NSObject子类的对象进行其持有属性或方法的设置 , 例如UIImageView类的对象持有image属性 , 那么使用LEETheme就可以为它设置不同主题对应的image属性值, 以此类推 , 当然所有类型的对象都可以添加自定义Block设置.
适用于固定和动态主题样式的情况下使用
优点:对于对象的设置只需要给定标识符即可, 代码较默认模式更加简洁, 可动态增加新主题JSON配置.
{
"color": {
"identifier1(唯一标识符)": "十六进制颜色值",
"identifier2": "#000000"
},
"image": {
"identifier3(唯一标识符)": "图片名称",
"identifier4": "lee.png"
},
"other": {
"identifier5(唯一标识符)": "其他值",
"identifier6": "12345"
}
}
这里一般分为3种类型
/**
* 添加json , 设置所属主题标签 , 设置资源路径 所添加过的Json配置会自动存储 无需每次都添加
* 关于资源路径的设置 只需要传入documents目录后的路径即可 如:@"theme_resources/black"
*/
[LEETheme addThemeConfigWithJson:json Tag:@"red" ResourcesPath:nil];
// 所要移除的主题标签
[LEETheme removeThemeConfigWithTag:@"red"];
// 设置背景颜色
imageView.lee_theme.LeeConfigBackgroundColor(@"identifier2");
// 设置图片
imageView.lee_theme.LeeConfigImage(@"identifier4");
// 自定义设置 (如果没有对应的标识符 则不会触发该block执行 , 如果有 则执行)
imageView.lee_theme.LeeCustomConfig(@"identifier6" , ^(id item , id value){
//item 为当前对象
//value 为当前主题的JSON配置中 other 类型下 "identifier6"对应的值
item.alpha = [value floatValue]; //举个例子 设置一下透明度
});
启用主题后 , LEETheme会自动保存当前所启用的主题 , APP下一次开启会自动启用上一次的主题.
// 启用主题
[LEETheme startTheme:@"主题标签"];
建议在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
中添加默认主题的设置 , 指定第一次启动APP时默认启用的主题.
// 设置默认主题
[LEETheme defaultTheme:@"主题标签"];
这里提供一个小技巧 可以让过渡更加自然 可根据自身情况调整使用.
切换主题前 获取当前window的快照视图 并覆盖到window上 > 执行主题切换 > 将覆盖的快照视图通过动画隐藏 显示出切换完成的真实window.
// 覆盖截图
UIView *tempView = [weakSelf.window snapshotViewAfterScreenUpdates:NO];
[weakSelf.window addSubview:tempView];
// 切换主题
[LEETheme startTheme:@"tag"];
// 增加动画 移除覆盖
[UIView animateWithDuration:1.0f animations:^{
tempView.alpha = 0.0f;
} completion:^(BOOL finished) {
[tempView removeFromSuperview];
}];
pod 'LEETheme'
。pod install
或 pod update
。<LEETheme/LEETheme.h>
。LEETheme.h
。该库最低支持 iOS 7.0
和 Xcode 9.0
。
详情请查看更新日志
LEETheme 使用 MIT 许可证,详情见 LICENSE 文件。