Overview
CATransaction是用于将多个图层树操作批量渲染的原子更新机制。 对图层树的每个修改都必须是事务的一部分。 支持嵌套事务。 核心动画支持两种类型的事务: 隐式事务和显式事务。
隐式事务
当在某一没有事务线程中对图层树进行了修改时,会自动创建隐式事务并在该线程的Runloop下一个迭代时自动提交隐式事务。
显式事务
[CATransaction begin];
// 对图层进行修改
[CATransaction commit];
CATransaction允许覆盖默认的动画属性,前提是这个属性是可动画的。 可以自定义持续时间,Timing,是否更改属性触发动画,并提供一个回调block,以便在完成事务组的所有动画时得到通知。
在事务期间,您可以临时获取一个递归自旋锁来管理属性原子性。
CATransaction支持嵌套事务。
下面的例子显示了如何在2秒的时间内淡出一个图层(命名为transitioning Layer)
同时缩放到它原始大小的三倍。 缩放动画在嵌套事务中,其持续时间为1秒。
外部事务完成后,将transitioning Layer层从其父层移除。
let transitioningLayer = CALayer()
// Outer transaction animates `opacity` to 0 over 2 seconds
CATransaction.begin()
CATransaction.setAnimationDuration(2)
CATransaction.setCompletionBlock {
transitioningLayer.removeFromSuperlayer()
}
transitioningLayer.opacity = 0
// Inner transaction animates scale to (3, 3, 3) over 1 second
CATransaction.begin()
CATransaction.setAnimationDuration(1)
transitioningLayer.transform = CATransform3DMakeScale(3, 3, 3)
CATransaction.commit() // Commits inner transaction
CATransaction.commit() // Commits outer transaction