-
CoreAnimation 核心动画
-
CALayer
-
概念
- UIView是对CALayer的封装,然UIView封装的API在有些情况下并不能满足我们的需求,比如:①阴影、圆角、边框,②3D变换,④遮罩,⑤非线性动画
- 为什么iOS要基于UIView和CALayer提供两个平行的层级关系?原因在于要做职责分离,这样也能避免很多重复代码,在iOS和MacOS两个平台上,事件和用户交互有很多地方的不同,基于多点触控的用户界面和基于鼠标键盘有着本质的区别,这就是为什么iOS有UIKit和UIView,而MacOS有AppKit和NSView的原因
-
创建方式
CALayer *layer = [CALayer layer];
-
常用属性
- bounds与position来确定Layer的大小和位置
- anchorPoint:锚点,Layer的定位是根据Layer的那一个点,默认中心点(0.5,0.5)
- CATransform3D transform:3D变换
- masksToBounds:裁剪掉多余的,同cornerRadius配合使用
- cornerRadius:设置圆角
- borderWidth、borderColor:设置边框的宽度、颜色
- opacity:设置透明度
- shadowColor:设置阴影颜色,同时也要设置shadowOpacity = 1
- mask:设置蒙版,同时设置masksToBounds = YES;
-
专用图层
- CAShapeLayer
- CATextLayer
- CAGradientLayer
- CAEmitterLayer
- AVPlayerLayer
-
-
CAAnimation(核心动画)
-
CAAnimation继承结构
-
CAMediaTiming协议
- beginTime 动画开始时间,可以延时动画开始,beginTime属性同timeOffset、speed三个属性可以实现动画的暂停与播放
- duration 动画持续总时长
- speed 动画播放速率
- timeOffset 时间偏移量,以某一个时间点动画的状态开始播放
- repeatCount 重复次数
- repeatDuration 重复总时长
- autorererses 是否反转动画,当一轮动画结束后
- fillMode 动画结束后的状态,要想fillMode有效,最好设置removedOnCompletion = NO;
-
timingFunction速度控制函数
- kCAMediaTimingFunctionLinear 线性、匀速
- kCAMediaTimingFunctionEaseln 先慢
- kCAMediaTimingFunctionEaseOut 后慢
- kCAMediaTimingFunctionEaseInEaseOut 先慢后慢中间快
-
CABasicAnimation
-
相关属性
- fromValue keyPath相应属性的初始值
- toValue keyPath相应属性的结束值
- byValue keyPath相应属性的结束值,从原始值到byValue
-
代码事例
CABasicAnimation *ani = [CABasicAnimation animationWithKeyPath: transform translation.x];
ani.byValue = @320;
ani.duration = 1;
ani.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseOut];
ani.fillMode = KCAFillModeForwards;
ani.removedOnCompletion = NO;
[self.animationView.layer.addAnimation: ani forKey: nil];
-
-
CAKeyframeAnimation 关键帧动画
- 关键帧动画与简单动画的区别是:简单动画只能从一个数值过渡到另一个数值,而关键帧动画会有一个NSArray来保存多个数值的过渡
-
常用属性
- values:NSArray类型,存储关键帧,动画依次显示values数组中的每一个关键帧
- path:可以设置一个CGPathRef、CGMutablePathRef,让图层按照路径轨迹移动,默认值为nil,当其被设定的时候values这个属性就被覆盖
- keyTimes:可以为对应的关键帧指定时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧,当keyTimes没有设置时,各关键帧的时间是平分的
- calculationMode:计算模式,动画的播放模式
-
CAAnimationGrop动画组
- CAAnimationGrop可以把简单动画、关键帧动画组合起来
- 属性animations:用来保存一组动画对象的NSArray
- 默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来改动属性的开始时间
-
CATransition转场动画
- CATransition并不像属性动画那样平滑地在两个值之间做动画,而是影响整个图层的变化,过渡动画首先展示之前的图层外观,然后通过一个变换过渡到新的外观
-
常用属性
- type:动画过渡类型,例如:kCATransitionFade(淡入淡出)
- subtype:动画过渡方向,例如:kCATransitionFromRight
- startProgress:动画起点
- endProgress:动画终点
- CALayer中可用作动画的属性
-
-
|
anchorPoint |
backgroundColor |
borderColor |
borderWidth |
bounds |
|
contents |
contentsRect |
cornerRadius |
hidden |
mask |
|
masksToBounds |
opacity |
position |
shadowOffset |
shadowOpacity |
|
shadowOffset |
shadowPath |
shadowRadius |
sublayers |
sublayerTransform |
|
transform |
zPosition |
本文深入探讨了CoreAnimation框架的核心组件CALayer的功能与用法,并详细介绍了如何利用CAAnimation进行复杂动画效果的设计,包括基本动画、关键帧动画及转场动画等。
2680

被折叠的 条评论
为什么被折叠?



