CALayer强加给你的动画效果

这个是之前波神问过我的一个问题,还是先看一张图片吧,左边是全部的代码,右边是点击的效果:

LayerAnimation

想必大家也看得出来了,在很短的代码中我只设置了testLayerframe且并没有给它加任何动画,但是他怎么会出现了过渡的动画效果呢 ?
看到这个问题的第一个想法就是通过Xcode查看SDK,通过Xcode确实是没发现什么东西,然后去了苹果的官网,搜了一下CALayer的官方文档,发现了下面的内容

我们知道CABasicAnimation是继承自CAAnimation的,于是我又Google以CAAnimation+CALayer为关键词搜索一下问题,偶然间发现下面这个问题:

关键是最后一句话,大概意思就是任何添加在[CATransaction begin][CATransaction commit]之间的动画都是CATransaction的一部分。

看到这个后,又在苹果的官网查了一下CATransaction的资料,果然发现下面这个说法:

最后尝试做了一下以下的修改,代码如下:

1
2
3
4
5
6
7
8
CATransaction.begin()
CATransaction.setDisableActions(true)
if self.count % 2 == 0 {
self.testLayer.frame = CGRect(x: 100, y: 100, width: 10, height: 199)
} else {
self.testLayer.frame = CGRect(x: 10, y: 30, width: 100, height: 100)
}
CATransaction.commit()

OK,It works 。。。
再次修改frame就不会有动画了。