CABasicAnimation, CAKeyframeAnimation,CAAnimationGroup动画的用法

一.CAAnimation动画


CABasicAnimation, CAKeyframeAnimation 可以通过 animationWithKeyPath 来初始化  
CABasicAnimation 有  fromValue 和  toValue 这两个属性
CAKeyframeAnimation 有 path(路径)这个属性
iOS9新出了一个动画CASpringAnimation, 它是继承CABasicAnimation

二.CABasicAnimation动画(最基本的动画)

// 创建动画
CABasicAnimation *animat = [CABasicAnimation animation];
// 动画改变属性 
animat.keyPath = @"position";
// 改变后的属性
animat.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 200)];
// 动画组件不被移除
animat.removedOnCompletion = NO;
// 保存最新状态
animat.fillMode = kCAFillModeForwards;

三.CAKeyframeAnimation动画(关键帧动画),就是一帧一帧的动画,关键帧动画keyPath是必须有的

// 图标抖动
// 定义帧动画
CAKeyframeAnimation *animat = [CAKeyframeAnimation animation];
// 改变弧度
animat.values = @[angleRadio(-5),angleRadio(5),angleRadio(-5)];
// 关键帧是什么必须有。
animat.keyPath = @"transform.rotation";
// 重复次数 
animat.repeatCount = MAXFLOAT;
// 添加动画
[_imageView.layer addAnimation:animat forKey:nil];

四.CAPropertyAnimation动画(属性动画),是CAAnimation的子类,但是不能直接使用,能直接使用的就是以上的两个类(CABasicAnimation和CAKeyframeAnimation).她有一个keyPath属性,所以两个子类才能使用keyPath属性,对CALayer属性值进行修改,达到动画效果


五.CAAnimationGroup动画(组动画),是将单个的动画放在这个动画组里,形成多个动画的组合.其中的animations,用于保存一组动画对象,例如:加入购物车,商品沿着轨迹边缩放边移动


六.CATransition动画(转场动画),是能够为层提供一处屏幕和移入屏幕的动画效果

  • type(动画过渡类型)属性:
    /* Common transition types. */
    
    CA_EXTERN NSString * const kCATransitionFade
        CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
    CA_EXTERN NSString * const kCATransitionMoveIn
        CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
    CA_EXTERN NSString * const kCATransitionPush
        CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
    CA_EXTERN NSString * const kCATransitionReveal
        CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  • subtype(动画过渡方向)属性:
    /* Common transition subtypes. */
    
    CA_EXTERN NSString * const kCATransitionFromRight
        CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
    CA_EXTERN NSString * const kCATransitionFromLeft
        CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
    CA_EXTERN NSString * const kCATransitionFromTop
        CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
    CA_EXTERN NSString * const kCATransitionFromBottom
        CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);

七.CASpringAnimation动画(弹簧动画),iOS9之后才引入的

CASpringAnimation *springAnimation = [CASpringAnimation animationWithKeyPath:@"position.x"];
    springAnimation.fromValue = label.layer.position.x;
    springAnimation.toValue = label.layer.position.x + 50.0;
    springAnimation.duration = springAnimation.settlingDuration;
    // 质量:影响图层运动时的弹簧惯性,质量越大,弹簧拉伸和压缩的幅度越大(大于0,默认是1)
    springAnimation.mass = 1;
    // 刚度系数(劲度系数/弹性系数),刚度系数越大,形变产生的力就越大,运动越快(大于0,默认是100)
    springAnimation.stiffness = 100;
    // 阻尼系数:阻止弹簧伸缩的系数,阻尼系数越大,停止越快(大于等于0,默认是10)
    springAnimation.damping = 10;
    // 初始速率,动画视图的初始速度大小
    // 速率为正数时,速度方向与运动方向一致;速率为负数时,速度方向与运动方向相反(默认是0)
    springAnimation.initialVelocity = 0;
    springAnimation.fillMode = kCAFillModeRemoved;

八.animationWithKeyPath:或者keyPath:后面的值:

      position  =   路劲(一般用CAKeyframeAnimation)
      transform  = 旋转
      transform.translation = 平移
      transform.translation.x = x平移
      transform.translation.y = y平移
      transform.scale = 比例转换
      transform.scale.x = x的比例转换
      transform.scale.y = y的比例转换
      transform.scale.y = y的比例转换
      transform.rotation.z = 平面圆的转换
      opacity = 透明度
      margin
      zPosition
      backgroundColor = 背景颜色
      cornerRadius = 圆角
      borderWidth
      bounds
      contents
      contentsRect
      cornerRadius
      frame  坐标
      hidden  隐藏
      mask
      masksToBounds
      shadowColor
      shadowOffset
      shadowOpacity
      shadowRadius


九.CABasicAnimation,CAKeyframeAnimation或者父类的一些属性:

Autoreverses:
当你设定这个属性为 YES 时,在它到达目的地之后,动画的返回到开始的值,代替了直接跳转到 开始的值。
Duration:
Duration 这个参数你已经相当熟悉了。它设定开始值到结束值花费的时间。期间会被速度的属性所影响。 
RemovedOnCompletion:
这个属性默认为 YES,那意味着,在指定的时间段完成后,动画就自动的从层上移除了。这个一般不用。
假如你想要再次用这个动画时,你需要设定这个属性为 NO。这样的话,下次你在通过-set 方法设定动画的属 性时,它将再次使用你的动画,而非默认的动画。
Speed :
默认的值为 1.0.这意味着动画播放按照默认的速度。如果你改变这个值为 2.0,动画会用 2 倍的速度播放。 这样的影响就是使持续时间减半。如果你指定的持续时间为 6 秒,速度为 2.0,动画就会播放 3 秒钟---一半的 持续时间。
BeginTime:
这个属性在组动画中很有用。它根据父动画组的持续时间,指定了开始播放动画的时间。默认的是 0.0.组 动画在下个段落中讨论“Animation Grouping”。
TimeOffset :
如果一个时间偏移量是被设定,动画不会真正的可见,直到根据父动画组中的执行时间得到的时间都流逝 了。
RepeatCount:
默认的是 0,意味着动画只会播放一次。如果指定一个无限大的重复次数,使用 1e100f。这个不应该和 repeatDration 属性一块使用。
RepeatDuration:
这个属性指定了动画应该被重复多久。动画会一直重复,直到设定的时间流逝完。它不应该和 repeatCount 一起使用。
FillMode:
这个属性有4种情况 一般都是第一种  kCAFillModeForwards


十.最后把动画添加到layer上:

[layer addAnimation:animation forKey:@""]

动画将会按照我们设定的时间工作。这告诉了层当需要做动画时, 使用我们给关键路径指定的新动画


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值