这是我参与 8 月更文挑战的第 3 天,活动详情查看: 8月更文挑战
简单的UIView动画属性
- 基于block的UIView动画允许你提供一个视图的最终状态以及动画时间,由系统自动计算变化规律并重绘
[UIView animateWithDuration: 1.5f animations: ^{
self.myView.alpha = 1;
}];
Core Animation
-
UIView 视图最终由Calayer展示。
-
contents 描述的是一个图像信息,在代码层面最接近于屏幕上可以显示的数据对象
-
contents的内容可以从内容缓冲区中生成
-(void) drawlnContext:(CGContextRef) ctx
-
拿到内容缓冲区,通过CoreGraphics进行相应的绘制操作
-
Core Graphics会通过GPU驱动暴露出来的API进行调用
- 内容呈现根据实现机制可分为两类
- 内容刷新
- 被调用display, 由系统调用,系统把握更好的时机。使用者只需要调用setNeedsDisplay标记,若急需刷新调用displayIFNeed
- 提供内容
- display
- delegate 的 displayLayer
- drawnlnContext
- delegate 的 drawLay: inContext
- 内容刷新
- 图层树
- CoreTransaction
- 动画事务管理
- CoreAnimation基于一个假设,即屏幕上的任何东西都可以(或者可能)做动画,所以当你改变CALayer的可做动画的属性,就会默认以平滑的动画改变,默认的duration是0.25秒,这就是所谓的隐式动画(ps:根层的layer没有隐式动画)。
- Core Animation使用CATransaction来管理动画事务,对干隐式动画,系统自动创建了一个隐式 CATransaction来管理。
- 我们也可以用到CATransaction来设置一些动画参数。有时候,调用一个接口做一些动画,但是接口并没有提供一个参数completionBlock,也可以利用CATransaction来添加completionBlock而不用改到别人的接口。如果有时需要关闭隐式动画,我们也可以通过调用
[CATransactionsetDisableActions:YES];
关闭 - CATransaction 是事务,用于批量提交多个layer-tree的操作,并且是原子性的。所有对layer-tree的修改都必须包含在事务内。事务可以嵌套。