TABAnimated对2.2.6版本进行了重构,
本篇文章将对TABAnimated 2.3.0的结构做一个简单说明。
映射机制的数据提升:
- CPU占用率降低35%
- 内存占用降低30%
- GPU降低30%
- CPU耗时操作大大减少
框架结构方面:
- 采用自顶向下的分析方法,基于面向协议,模块重组、分层建设
- 高度的动画自定制
测试机型:iPhone X
测试环境:单线程
测试工具:Intruments
测试类型:UITableView 单section
测试方式:高频压测
CPU | GPU | 内存占用 | |
---|---|---|---|
旧版本 | 14% - 18% | 31% - 35% | 31.5M |
新版本 | 9% - 15% | 16% - 17% | 21.5M |
缓存 | 8% - 13% | 14% - 17% | 21.5M |
测试机型:iPhone 6s
测试环境:单线程
测试工具:Intruments
测试类型:UITableView 单section
测试方式:高频压测
CPU | GPU | 内存占用 | |
---|---|---|---|
旧版本 | 15% - 19% | 32% - 45% | 28.3M |
新版本 | 9% - 15% | 30% - 38% | 18.5M |
缓存 | 8% - 13% | 30% - 38% | 18.5M |
PS:内存、CPU、GPU的统计是对于整个UIViewController的统计,并且是在压测情况下,压测就是频繁地创建释放创建释放。缓存的数据适用于新旧版本,也就是说本次数据的提升主要针对于映射机制。
所有Api都是兼容的,但是希望开发者使用新的Api替代。
- 增加了一个值得关注的属性
scrollEnable
,默认值为YES。
意为在骨架屏期间,是否可以滚动,老版本都是可以滚动的,默认值与老版本一致。 - 基于协议将动画与生产层完全剥离的同时,不再支持多种动画融合的使用方式,在异步调整模块,chain链条可以获取四种动画的Api,但是只有当前动画类型的api会生效
TABAnimated 2.3.0 基于面向协议进行了分层处理。
层与层之间通过协议通信,且不必关心对方的实现。
控制层:由控制模型绑定参数、把握时机,向生产层输送生产任务
生产层:生产层拿到生产任务,使用内置缓存机制、复用池、生产流水线进行生产,这一层也是此次优化的重点
加工层:加工层将已经生产好的产品进行加工。主要通过动画协议、暗黑模式协议、调整协议,而协议的控制权交由控制层。所以即便是加工层的任务,开发者也只需要聚焦于控制层开放的api。
控制层、生产层通信协议:TABAnimatedProductInterface
生产层、加工层通信协议:TABAnimationManagerInterface、TABAnimatedChainManagerInterface、TABAnimatedDarkModeManagerInterface
生产层对外协议:TABComponentLayerSerializationInterface
用途:开发者在自定制动画时,如果需要为骨架单元增加属性,可在此实现序列化
加工层对外协议:TABAnimatedDecorateInterface、TABAnimatedDarkModeInterface
PS:对外协议可重写,在控制层重新赋值
控制层主要类及其职责:
类名 | 用途 |
---|---|
TABViewAnimated | 用于UIView |
TABTableAnimated | 用于UITableView |
TABCollectionAnimated | 用于UICollectionView |
TABFormAnimated | TABTableAnimated和TABCollectionAnimated的公共基类 |
UIView+TABControlAnimation | 骨架动画最上层的启动、结束接口 |
控制层通过生产协议TABAnimatedProductInterface
与生产层通信,
控制层在需要的时机选择不同的生产方法,生产骨架屏。
生产层主要类及其职责:
类名 | 用途 |
---|---|
TABAnimatedProductInterface | 生产协议 |
TABAnimatedProductImpl | 生产协议的实现类 |
TABAnimatedProduction | 产品,也是缓存的对象,是骨架的主体 |
TABComponentLayer | 骨架元素单元 |
TABAnimatedProductHelper | 生产流水的辅助类,主要用来分担TABAnimatedProductImpl的任务 |
TABComponentLayerSerializationInterface | 骨架屏序列化协议,供自定制动画使用 |
生产完成后,根据开发者的配置,还需要对骨架元素进行加工:
- 异步调整管理协议
TABAnimatedChainManagerInterface
:选择并执行异步调整回调,负责进一步调整骨架元素 - 动画管理协议
TABAnimationManagerInterface
:对骨架元素进行动画周期的管理 - 暗黑模式管理协议
TABAnimatedDarkModeManagerInterface
:对目标视图进行暗黑模式状态的管理
加工层对外可定制协议:
- 异步调整回调
TABAdjustBlock
:异步调整骨架元素属性的主体 - 暗黑模式转换协议
TABAnimatedDarkModeInterface
:暗黑模式转换的主体 - 动画协议
TABAnimatedDecorateInterface
:动画添加的主体
控制视图: 如果你的UITableView需要骨架元素,那么UITableView就是控制视图,绑定TABTableAnimated
在TABTableAnimated中自行实现对外协议,达到自定制效果
// 生产者
@property (nonatomic, strong) id <TABAnimatedProductInterface> producter;
// 装饰者,用于制作自定义动画, 关联layers
@property (nonatomic, strong) id <TABAnimatedDecorateInterface> decorator;
// 暗黑模式骨架内容切换协议
@property (nonatomic, strong) id <TABAnimatedDarkModeInterface> switcher;
// TABComponetLayer序列化协议
@property (nonatomic, strong) id <TABComponentLayerSerializationInterface> serializationImpl;