Overview
CATransaction是用于將多個(gè)圖層樹(shù)操作批量渲染的原子更新機(jī)制。 對(duì)圖層樹(shù)的每個(gè)修改都必須是事務(wù)的一部分。 支持嵌套事務(wù)。 核心動(dòng)畫(huà)支持兩種類(lèi)型的事務(wù): 隱式事務(wù)和顯式事務(wù)。
隱式事務(wù)
當(dāng)在某一沒(méi)有事務(wù)線程中對(duì)圖層樹(shù)進(jìn)行了修改時(shí),會(huì)自動(dòng)創(chuàng)建隱式事務(wù)并在該線程的Runloop下一個(gè)迭代時(shí)自動(dòng)提交隱式事務(wù)。
顯式事務(wù)
[CATransaction begin];
// 對(duì)圖層進(jìn)行修改
[CATransaction commit];
CATransaction允許覆蓋默認(rèn)的動(dòng)畫(huà)屬性,前提是這個(gè)屬性是可動(dòng)畫(huà)的。 可以自定義持續(xù)時(shí)間,Timing,是否更改屬性觸發(fā)動(dòng)畫(huà),并提供一個(gè)回調(diào)block,以便在完成事務(wù)組的所有動(dòng)畫(huà)時(shí)得到通知。
在事務(wù)期間,您可以臨時(shí)獲取一個(gè)遞歸自旋鎖來(lái)管理屬性原子性。
CATransaction支持嵌套事務(wù)。
下面的例子顯示了如何在2秒的時(shí)間內(nèi)淡出一個(gè)圖層(命名為transitioning Layer)
同時(shí)縮放到它原始大小的三倍。 縮放動(dòng)畫(huà)在嵌套事務(wù)中,其持續(xù)時(shí)間為1秒。
外部事務(wù)完成后,將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