区块链技术博客
www.b2bchain.cn

CALayer & CATransaction & Core Animation求职学习资料

本文介绍了CALayer & CATransaction & Core Animation求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

主要就动画侧总结下CALayer/CATransaction/CoreAnimation的内容
以下内容主要参考博客

CALayer隐式动画

首先隐式动画是指,对CALayer的Animatable Properties进行改动时,即使没有加任何显示的动画代码,也会有一段渐变动画,比如改变背景颜色:

self.btn.backgroundColor = UIColor.orangeColor; self.layer.backgroundColor = UIColor.orangeColor.CGColor;

UIButton的颜色就瞬时变化了,而CALayer就会有一段渐变动画。注意即使更改UIButton的layer属性,比如cornerRadius也不会触发隐式动画。

对于所有非backen layer(单纯的CALayer,没有UIView作为代理),改动其Animatable Properties(所有动画属性)都会产生隐式动画,隐式动画时常为0.25s

CATransaction和动画

CATransaction苹果文档称为事务,文档对其有一句话解释:”CATransaction is the Core Animation mechanism for batching multiple layer-tree operations into atomic updates to the render tree. Every modification to a layer tree must be part of a transaction. “
事务分为隐式事务和显示事务:
显示事务就是显示调用[CATransaction begin]; [CATransaction commit];等。而隐式事务就是不显示写相关代码,隐式事务的发生是在runloop中被调用的,具体可见下面代码:
CALayer & CATransaction & Core Animation

在我的另一篇博客关于drawRect:方法中,也写到每轮runloop都会在调用监听beforeWaiting的观察者事件,其中就包括调用CA::Transaction::commit(),这里就是隐式事务提交的地方。

CATransaction还可以显示改变隐式动画的动画配置,比如下面代码:

self.layer.opacity = 0; self.layer.transform = CATransform3DMakeScale(3, 3, 3);

会默认0.25s完成,我们可以做如下更改将动画时间延长:

    [CATransaction begin];     [CATransaction setAnimationDuration:5];     self.layer.opacity = 0;     self.layer.transform = CATransform3DMakeScale(3, 3, 3);     [CATransaction commit];

视图或动画的渲染过程

整个视图或动画的渲染流程如下,为了确保60FPS,理想状态下每一段的时间不超过16.7ms:
CALayer & CATransaction & Core Animation

当CATransaction commit之后,视图层的改动就被提交到“渲染进程了”,所以Xcode调试时即使暂停工程,动画还是会继续进行下去,因为动画的渲染和APP不是一个进程;同时CoreAnimation作用的是CALayer,不是UIView

主要就动画侧总结下CALayer/CATransaction/CoreAnimation的内容
以下内容主要参考博客

CALayer隐式动画

首先隐式动画是指,对CALayer的Animatable Properties进行改动时,即使没有加任何显示的动画代码,也会有一段渐变动画,比如改变背景颜色:

self.btn.backgroundColor = UIColor.orangeColor; self.layer.backgroundColor = UIColor.orangeColor.CGColor;

UIButton的颜色就瞬时变化了,而CALayer就会有一段渐变动画。注意即使更改UIButton的layer属性,比如cornerRadius也不会触发隐式动画。

对于所有非backen layer(单纯的CALayer,没有UIView作为代理),改动其Animatable Properties(所有动画属性)都会产生隐式动画,隐式动画时常为0.25s

CATransaction和动画

CATransaction苹果文档称为事务,文档对其有一句话解释:”CATransaction is the Core Animation mechanism for batching multiple layer-tree operations into atomic updates to the render tree. Every modification to a layer tree must be part of a transaction. “
事务分为隐式事务和显示事务:
显示事务就是显示调用[CATransaction begin]; [CATransaction commit];等。而隐式事务就是不显示写相关代码,隐式事务的发生是在runloop中被调用的,具体可见下面代码:
CALayer & CATransaction & Core Animation

在我的另一篇博客关于drawRect:方法中,也写到每轮runloop都会在调用监听beforeWaiting的观察者事件,其中就包括调用CA::Transaction::commit(),这里就是隐式事务提交的地方。

CATransaction还可以显示改变隐式动画的动画配置,比如下面代码:

self.layer.opacity = 0; self.layer.transform = CATransform3DMakeScale(3, 3, 3);

会默认0.25s完成,我们可以做如下更改将动画时间延长:

    [CATransaction begin];     [CATransaction setAnimationDuration:5];     self.layer.opacity = 0;     self.layer.transform = CATransform3DMakeScale(3, 3, 3);     [CATransaction commit];

视图或动画的渲染过程

整个视图或动画的渲染流程如下,为了确保60FPS,理想状态下每一段的时间不超过16.7ms:
CALayer & CATransaction & Core Animation

当CATransaction commit之后,视图层的改动就被提交到“渲染进程了”,所以Xcode调试时即使暂停工程,动画还是会继续进行下去,因为动画的渲染和APP不是一个进程;同时CoreAnimation作用的是CALayer,不是UIView

主要就动画侧总结下CALayer/CATransaction/CoreAnimation的内容
以下内容主要参考博客

CALayer隐式动画

首先隐式动画是指,对CALayer的Animatable Properties进行改动时,即使没有加任何显示的动画代码,也会有一段渐变动画,比如改变背景颜色:

self.btn.backgroundColor = UIColor.orangeColor; self.layer.backgroundColor = UIColor.orangeColor.CGColor;

UIButton的颜色就瞬时变化了,而CALayer就会有一段渐变动画。注意即使更改UIButton的layer属性,比如cornerRadius也不会触发隐式动画。

对于所有非backen layer(单纯的CALayer,没有UIView作为代理),改动其Animatable Properties(所有动画属性)都会产生隐式动画,隐式动画时常为0.25s

CATransaction和动画

CATransaction苹果文档称为事务,文档对其有一句话解释:”CATransaction is the Core Animation mechanism for batching multiple layer-tree operations into atomic updates to the render tree. Every modification to a layer tree must be part of a transaction. “
事务分为隐式事务和显示事务:
显示事务就是显示调用[CATransaction begin]; [CATransaction commit];等。而隐式事务就是不显示写相关代码,隐式事务的发生是在runloop中被调用的,具体可见下面代码:
CALayer & CATransaction & Core Animation

在我的另一篇博客关于drawRect:方法中,也写到每轮runloop都会在调用监听beforeWaiting的观察者事件,其中就包括调用CA::Transaction::commit(),这里就是隐式事务提交的地方。

CATransaction还可以显示改变隐式动画的动画配置,比如下面代码:

self.layer.opacity = 0; self.layer.transform = CATransform3DMakeScale(3, 3, 3);

会默认0.25s完成,我们可以做如下更改将动画时间延长:

    [CATransaction begin];     [CATransaction setAnimationDuration:5];     self.layer.opacity = 0;     self.layer.transform = CATransform3DMakeScale(3, 3, 3);     [CATransaction commit];

视图或动画的渲染过程

整个视图或动画的渲染流程如下,为了确保60FPS,理想状态下每一段的时间不超过16.7ms:
CALayer & CATransaction & Core Animation

当CATransaction commit之后,视图层的改动就被提交到“渲染进程了”,所以Xcode调试时即使暂停工程,动画还是会继续进行下去,因为动画的渲染和APP不是一个进程;同时CoreAnimation作用的是CALayer,不是UIView

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » CALayer & CATransaction & Core Animation求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们