SubLayer的自带隐式动画
如果我直接对一个CALayer添加SubLayer
1 |
|
在处理SubLayer的属性SetFrame时,被添加的SubLayer会从当前的状态通过一个 隐式动画 过度到目标状态,但是SuperLayer不会,例如
1 | // No Implicit Animation |
如何关闭自带的隐式动画
我们可以通过隐式动画的事务控制方法来关闭隐式动画,
1 |
|
或者
1 | [CATransaction begin]; |
原理就是在事务中包裹了一个事务,在被包裹的事务中定义Action不生效,参考文章StackOverflow
隐式动画 CompletionBlock的设定
在 CATransaction 的事务控制中,如果想要在其完成后设定Completion必须在形变设定之前,最好在 begin 后直接开始设置, 不然调用的时机的异常
1 | [CATransaction begin]; |
产生这个问题的原因,根据StackOverlay的回答 和 官方文档中Discussion部分 中提到的这个关键词 subsequently
1 | .....as soon as all animations !!!subsequently added!!!by this transaction group have completed (or have been removed.) ..... |
也就是说 CompletionBlock会在 整个begin….commit之间其之后 的动画设定完成后执行,所以不能够以这种方式书写
1 | [CATransaction begin]; |