是否存在嵌套的CATransaction?

时间:2016-09-05 03:06:49

标签: ios caanimation nsrunloop catransaction cfrunloop

以下代码会在backgroundColor之后立即更新commit

[CATransaction begin];
self.view.backgroundColor = [UIColor redColor];
[CATransaction commit];

sleep(5);

但是对于嵌套显式CATransactions,屏幕只在最外部事务提交时更新。

[CATransaction begin];
[CATransaction begin];
self.view.backgroundColor = [UIColor redColor];
[CATransaction commit];
sleep(5);
[CATransaction commit];

所以这很奇怪,因为我们知道runloop会在每个循环中创建一个外部最隐式的事务。为什么在implicit transaction提交时,explicit transaction不被视为最外层事务?

1 个答案:

答案 0 :(得分:1)

始终存在隐式事务。也可以有明确的交易。在您的所有代码完成运行之前,隐式事务不会提交。如果您有明确的事务(begincommit),那么它会在遇到commit时提交。

嵌套显式事务的目的只是为了允许您为动画的不同部分提供不同的参数(例如持续时间);直到最外面的commit才会发生实际提交。阅读the docs

  

只有在为最外层事务提交更改后,Core Animation才会开始关联的动画