• Stars
    star
    816
  • Rank 55,881 (Top 2 %)
  • Language
    Objective-C
  • License
    MIT License
  • Created over 8 years ago
  • Updated 7 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

优雅的主题管理库- 一行代码完成多样式切换

LEETheme - 最好用的轻量级主题管理框架

            Build Status 

演示

新日间Demo演示 新夜间Demo演示

新日间Demo演示 新夜间Demo演示

特性

  • 链式语法 结构优雅
  • 两种设置模式,可根据对象单独添加某一主题中某一属性或方法的设置,可使用标识符模式为某一属性或方法设置标识符,二者可混合使用,满足不同需求的开发者。
  • 轻量级设计, 简化文件架构, 全部集合为两个文件中。
  • 支持对所有NSObject子类对象进行设置, 并提供了常用视图对象的颜色和图片等属性的快捷设置方法。
  • 支持自定义类型对象的自定义属性或方法设置。
  • 支持动态添加主题,可实现类似网络主题下载并切换的功能。
  • 语法优雅, 高效简洁, OC链式, 一行代码完成对象设置。
  • 当前主题记忆功能, 下一次启动自动布置。
  • 完善的文档注释和使用教程, 并有众多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"]);

// 添加自定义设置 (每个主题标签对应一个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配置.

JSON标准格式
{
	"color": {
	   	"identifier1(唯一标识符)": "十六进制颜色值",
	    	"identifier2": "#000000"
	},
	"image": {
		"identifier3(唯一标识符)": "图片名称",
		 "identifier4": "lee.png"
	},
	"other": {
		"identifier5(唯一标识符)": "其他值",
		 "identifier6": "12345"
	}
}

这里一般分为3种类型

  1. 颜色类型 (color) - 适用于颜色属性
  2. 图片类型 (image) - 适用于图片属性
  3. 其他类型 (other) - 适用于自定义Block

JSON配置关系图

添加新主题的JSON配置
/**
 * 添加json , 设置所属主题标签 , 设置资源路径  所添加过的Json配置会自动存储 无需每次都添加
 * 关于资源路径的设置 只需要传入documents目录后的路径即可 如:@"theme_resources/black"
 */
 [LEETheme addThemeConfigWithJson:json Tag:@"red" ResourcesPath:nil];
移除某一主题的JSON配置
// 所要移除的主题标签
[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];
}];

注意事项

  • 默认模式与标识符模式可以同时使用.
  • 当一个对象同时使用了2种设置模式 那么同主题情况下会优先使用后设置的.
  • JSON中的标识符(identifier)要确保在当前JSON中是唯一的.
  • 每个主题对应的JSON中 标识符(identifier)要相同.
  • 不要忘记设置默认主题, 应用中应该最少会有一个默认的主题.

更多示例Demo

新闻资讯详情Demo

安装

CocoaPods

  1. 将 cocoapods 更新至最新版本.
  2. 在 Podfile 中添加 pod 'LEETheme'
  3. 执行 pod installpod update
  4. 导入 <LEETheme/LEETheme.h>

手动安装

  1. 下载 LEETheme 文件夹内的所有内容。
  2. 将 LEETheme 内的源文件添加(拖放)到你的工程。
  3. 导入 LEETheme.h

系统要求

该库最低支持 iOS 7.0Xcode 9.0

版本更新

详情请查看更新日志

许可证

LEETheme 使用 MIT 许可证,详情见 LICENSE 文件。

友情链接

高效的自动布局库 - SDAutoLayout

个人主页

我的简书

More Repositories

1

LEEAlert

优雅的可自定义 Alert ActionSheet
Objective-C
1,297
star
2

AttributedString

基于Swift插值方式优雅的构建富文本, 支持点击长按事件, 支持不同类型过滤, 支持自定义视图等.
Swift
835
star
3

AutoInch

优雅的iPhone全尺寸/等比例精准适配工具
Swift
463
star
4

NewsDetailsDemo

资讯详情文章页面Demo 内容部分为HTML数据格式 基于WKWebView加载 原生图片加载方式 (支持GIF图片) 支持持久化缓存等
Objective-C
87
star
5

LEECoolButton

一个炫酷的按钮(适用于喜欢 , 点赞 , 收藏等)
Objective-C
74
star
6

VideoTransitionDemo

视频过渡效果演示
Swift
71
star
7

LEEStarRating

星星评分视图控件 支持整颗 , 半颗 , 无限制评分 可自定义分数范围和星星个数等
Objective-C
60
star
8

UIAdapter

An elegant solution to the iOS screen adaptation problem
Swift
53
star
9

PermissionKit

An elegant permission manager written in swift
Swift
36
star
10

ViewControllerDemo

Swift 泛型 UIViewController的View分离演示
Swift
21
star
11

Router

基于URLNavigator抽象的外部URL路由组件 支持任意类型配置 插件机制
Swift
20
star
12

Loading

An elegant loading view written in swift
Swift
20
star
13

SKUFilterDemo

SKUFilter 电商Stock Keeping Unit选择过滤器示例
Swift
20
star
14

Apis

基于URLNavigator抽象的URL路由组件 灵感来自Moya 配置化 插件化.
Swift
17
star
15

Guider

An elegant highlight focus guide written in swift
Swift
10
star
16

Spring

An elegant animation written in swift
Swift
10
star
17

VideoPlayer

Swift
9
star
18

GearAnimationDemo

齿轮动画Demo
Objective-C
8
star
19

AudioPlayer

Swift
7
star
20

SDKit

简洁、高效的iOS开发“一站式”工具库
Objective-C
6
star
21

Alienware-Aurora-R13-Water-Cooling

外置压缩机水冷改装分享
5
star
22

LEEBubble

一个有趣的小气泡
Objective-C
5
star
23

Scanner

二维码扫描Demo
Swift
4
star
24

AsyncLayer

iOS 异步渲染Layer
Swift
3
star
25

IMInterface

Swift
2
star
26

VideoClipDemo

视频剪切Demo
Swift
2
star
27

LinearView

Linear layout view based on UIStackView Use chain encapsulation to quickly build vertical or horizontal layout views.
Swift
2
star
28

Specs

CocoaPods PodSpecs
Ruby
2
star
29

Resources

1
star
30

LEEResume

简历
JavaScript
1
star
31

Delegates

An elegant multiple delegate written in swift
Swift
1
star
32

ghost-lee-theme

Ghost Blog Themes (LEE)
CSS
1
star
33

QQMusicPlayerDemo

音乐播放器示例Demo 参考QQ音乐
Objective-C
1
star