iOS学习之路02

来源:互联网 发布:用记事本编写java 编辑:程序博客网 时间:2024/05/16 04:56
  • 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

   

 

原创粉丝点击