原生骨架库模版功能上线,零耦合。

37次阅读

共计 1798 个字符,预计需要花费 5 分钟才能阅读完成。

前言
前文章地址
首先,原有的骨架库实现的大概思路:如果你开启了动画,框架会根据 view 内的所有 subViews 的位置,映射出一组一模一样的 CALayer 动画,并进行管理。
目录

技术瓶颈
模版功能 – 展示
模版功能 – 使用方式
模版功能 – 其他细节

技术瓶颈
如果使用约束进行布局,例如知名的第三方库 Masonry 布局,大部分只需要 2 个约束就可以很好地布局。
但是,2 个约束就可以很好地布局是在数据已经填充的前提下,如果没有数据,则 frame 信息是完全不对。因此,映射不出合理的动画。
本框架采用的是 AOP 编程,最初地思想是开发者尽量不需要动自己原有的代码,就可以完成动画的设置。
但是,当你使用后会发现,会于原代码产生一定耦合,不会利于他人阅读和维护。
我们将骨架展示给用户时,大部分情况是这样的:

可能并不需要很复杂的 view,子 view 并不需要完全展示给用户
可能是很个性化的 view(因为映射出的动画,并不能保证好看,又需要调试)
可能是通用的 view,很多地方共用一个就行了

那么模版功能特别适合你。
模版功能 – 展示

交流群
TABAniamted 交流群:304543771 提出你的意见
模版功能 – 使用方式
模版功能是库的一个新功能,并不是一个新的库。

模版功能只针对常用的表格组件。
开启和结束动画的方式不变
唯一的改变就是在表格初始化的时候,注册模版,如下

– (UICollectionView *)collectionView {
if (!_collectionView) {
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, kNavigationHeight, kScreenWidth, kScreenHeight-kNavigationHeight) collectionViewLayout:layout];
_collectionView.backgroundColor = [UIColor whiteColor];
_collectionView.dataSource = self;
_collectionView.delegate = self;
_collectionView.animatedDelegate = self;
_collectionView.showsHorizontalScrollIndicator = NO;
_collectionView.showsVerticalScrollIndicator = NO;

// 注册模版
[_collectionView registerTemplateClassArray:@[[TemplateCollectionViewCell class],
[TemplateSecondCollectionViewCell class]]];

}
return _collectionView;
}

模版功能 – 其他细节
cell 模版需要自己写,布局写死,想什么样就什么样
但需要继承自 TABBaseCollectionViewCell 或 TABBaseTableViewCell
以 table 举例,TABBaseTableViewCell 中的 cellHeight 方法,
需要你在子类重写,并指定数值,这个返回值就是改模版在动画是展示的高度
+ (NSNumber *)cellHeight {
return [NSNumber numberWithFloat:10+headImgWidth+5+80+10+imgWidth];
}

模版功能依旧根据 animationType 设置动画类型
使用 isUseTemplate 属性切换为模版模式,可以在动画开启前随意切换。
模版中的组件,使用经典类型的动画,依旧需要指定动画类型
提供两种方式注册模版,一个 section 和多 section,

多个 section 是以一个 class 数组形式储存。言外之意,数组中的模版类和 section 一一对应。
– (void)registerTemplateClassArray:(NSArray <Class> *)classArray;
最后

如有问题,加入交流群:304543771
github 地址:https://github.com/tigerAndBu…

正文完
 0