我看到很多人用它来禁用隐式动画:
[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。
答案 0 :(得分:2)
这与Core Animation中的事务块有关。默认情况下,有一个隐式事务块会自动捕获对CATransaction的调用。使用CATransaction begin / commit创建一个显式事务块,允许您将不同的动画特征应用于动画的不同元素。
理论上,如果需要立即执行某些操作而不是下一次重绘调用(例如添加或删除动画),则可能需要显式事务块。如果操作不正确,这会导致问题,例如在完成任何绘制调用之前启动动画。