Skip to content

Latest commit

 

History

History
executable file
·
59 lines (38 loc) · 2.61 KB

动画元素下标问题.md

File metadata and controls

executable file
·
59 lines (38 loc) · 2.61 KB

前言

本文主要解决下面这一个问题:

开发者如何才能准确知道动画元素的下标?

_tableView.tabAnimated.adjustBlock = ^(TABComponentManager * _Nonnull manager) {
    manager.animation(1).down(3).height(12);
    manager.animation(2).height(12).reducedWidth(90);
    manager.animation(3).down(-5).height(12).radius(0.).reducedWidth(-20);
};  

animation(x) 其中的x的数值是几?

如何通过实现原理,思考获得下标的?

TABAnimated采取递归的方式,取得当前视图单元的子视图集合。

  • 对于纯代码布局,下标的顺序就是addSubView的顺序
  • 对于xib布局,下标顺序是关联变量的顺序。

这样做岂不是很麻烦

  1. 对于xib布局特别坑,如果习惯不是特别好,那么关联的组件顺序开发者自己根本就不知道,只能一个一个尝试。
  2. 对于纯代码布局,如果视图数量稍微多一点,就要打开对应的文件去看,然后按照规则得出顺序。

解决方案

起初,我也意识到了这个问题,但思路一直是如何调整动画元素的顺序,让开发者很容易就能准确判断出顺序,然后对应修改。

期间,也有想过根据动画元素的frame,按照从左往右,从上至下动态调整顺序,但是还是觉得有点蠢,所以并没有推出。

作者自己在集成中也始终觉得这是一个很难受的点。前几天突然顿悟,自己以前太蠢啦,既然已经知道下标了,为什么不体现出来呢?

如下图所示:

image.png

将版本新增的全局属性openAnimationTag属性设置为YES, 会将所有元素自动添加红色的角标,角标就是动画元素对应的下标。 如此以来,开发者不需要在纠结哪个元素对应是哪个下标了。

例如:

调整红色1号的宽度为20,高度为10,圆角为3

view.animation(1).width(20).height(10).radius(3);

以前把时间都浪费在红色1号的下标是哪个了,现在无需纠结,一眼看过去,哪个对哪个很清晰。 想要调整红色1号,那就是view.animation(1),屡试不爽。

注意:为了防止开发者粗心,在生产环境下没有及时将属性openAnimationTag改回去,同时减少生产环境不必要的判断 ,无论openAnimationTag 的值为多少,红色角标仅会在debug模式下生成。

后记

对于特别复杂的视图,有的元素可能会堆在一起,目前没有提供很好的做法,建议通过实现原理定位下标。