禁用没有CATransaction的隐式动画开始和提交

时间:2014-06-07 16:07:51

标签: ios objective-c core-animation catransaction

我看到很多人用它来禁用隐式动画:

[CATransaction begin];
[CATransaction setDisableActions:YES];
someLayer.backgroundColor = someCGColor;//no animation
[CATransaction commit];

但如果没有CATransaction开始并提交它也可以

[CATransaction setDisableActions:YES];
someLayer.backgroundColor = someCGColor;//no animation

并且像这样也有效:

[CATransaction setDisableActions:YES];
someLayer1.backgroundColor = someCGColor;//no animation
[CATransaction setDisableActions:NO];
someLayer2.backgroundColor = someCGColor2; //have animation

所以问题是,为什么我需要使用 CATransaction begin& commit ?有什么情况我必须使用它们吗?

谢谢,Aunn。

1 个答案:

答案 0 :(得分:2)

这与Core Animation中的事务块有关。默认情况下,有一个隐式事务块会自动捕获对CATransaction的调用。使用CATransaction begin / commit创建一个显式事务块,允许您将不同的动画特征应用于动画的不同元素。

理论上,如果需要立即执行某些操作而不是下一次重绘调用(例如添加或删除动画),则可能需要显式事务块。如果操作不正确,这会导致问题,例如在完成任何绘制调用之前启动动画。