6

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

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

但是没有 CATransaction begin&commit它也可以工作

[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?有没有我必须使用它们的情况?

谢谢,阿恩。

4

1 回答 1

2

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

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

于 2014-06-12T16:02:15.307 回答