CATransaction核心动画事务

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文将分为四个部分介绍核心动画: 第一部分将介绍核心动画的基本概念。 第二部分将介绍动画实现原理。 第三部分将介绍...
    曲年阅读 3,249评论 1 9
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,613评论 6 30
  • 前言 本文只要描述了iOS中的Core Animation(核心动画:隐式动画、显示动画)、贝塞尔曲线、UIVie...
    GitHubPorter阅读 3,682评论 7 11
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,164评论 5 13
  • 书写的很好,翻译的也棒!感谢译者,感谢感谢! iOS-Core-Animation-Advanced-Techni...
    钱嘘嘘阅读 2,346评论 0 6