以下代码会在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
不被视为最外层事务?
答案 0 :(得分:1)
始终存在隐式事务。也可以有明确的交易。在您的所有代码完成运行之前,隐式事务不会提交。如果您有明确的事务(begin
和commit
),那么它会在遇到commit
时提交。
嵌套显式事务的目的只是为了允许您为动画的不同部分提供不同的参数(例如持续时间);直到最外面的commit
才会发生实际提交。阅读the docs:
只有在为最外层事务提交更改后,Core Animation才会开始关联的动画