判断动画状态(完成/进行中)

文章以UIView块动画为例,探讨动画状态判断问题。指出用__block属性记录动画状态在拓展到其他动画时不方便,介绍了通过查看CALayer的animationKeys的count是否为空来判断有无动画,还说明多次调用块动画时,不能仅依赖complete属性,应判断layer上animationKeys数目是否为0。

就拿UIView块动画做例子吧.

加入我们拿一个UIView做动画.

	UIView *redView = [UIView new];
	UIView animationWithDuration:.xx animation:^{
		xxxx
	} complete:^{
		// 完成代码块
	}];

当然.我们可以弄一个__block的属性.利用这个完成回调去记录一下动画状态.
但是拓展到其他的动画比如CABaseAnimation啊.keyxxxx之类的啊.就不太方便.

首先.UIView动画等动画.本质是对CALayer做动画.我们在UIView停止一个块动画文章中提到了.要停止一个动画(看完这篇文章就能这样拓展了)我们可以让这个layer removeAllanimation.那么.我们的动画肯定是加到了layer上.

然后翻一下CALayer的头文件我们可以看到这个属性.

/* Returns an array containing the keys of all animations currently
 * attached to the receiver. The order of the array matches the order
 * in which animations will be applied. */
/// 包含当前所有动画的键的数组
- (nullable NSArray<NSString *> *)animationKeys;

那么我们只需要查看一下animationKeys的count是否为空.为空就为无动画.不为空就是有动画.

在这里插入图片描述
在这里插入图片描述
一次动画看起来没啥毛病

在这里插入图片描述
多次调用块动画看起来就不太对了.这是因为,complete是记录的当前块动画结束.而不是动画View上没有动画了的属性.所以我们判断一个View没动画可以判断他layer上的animationKeys的数目是否为0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值