iOS学习之路02 - CoreAnimation

本文深入探讨了CoreAnimation框架的核心组件CALayer的功能与用法,并详细介绍了如何利用CAAnimation进行复杂动画效果的设计,包括基本动画、关键帧动画及转场动画等。
  • 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

     

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值