美文网首页
iOS核心动画(CoreAnimation)之CABasicAn

iOS核心动画(CoreAnimation)之CABasicAn

作者: HarveyCC | 来源:发表于2018-04-19 14:31 被阅读13次

    了解CoreAnimation

    • CoreAnimation是苹果提供的一套基于绘图的动画框架。


      image

      上图是苹果给出的体系结构,最低层是硬件层(GPU),上层是OpenGL和CoreGraphics,再上层CoreAnimation,最上层就是UIKit.
      所以CoreAnimation是基于OpenGL和CoreGraphics封装的,并不是直接接触硬件层.

    • CoreAnimation不是一个独立框架,而是封装在QuartzCore框架中.
    • CoreAnimation是作用于layer,不是View,这点要注意.

    CABasicAnimation使用

    CoreAnimation包含了许多的高级动画效果,CABasicAnimation只是其中一小部分,也是最基础动画.
    CABasicAnimation的常用属性详解

    • timingFunction 可选
      控制动画的运行节奏;有以下5种类型
    类型 描述
    kCAMediaTimingFunctionLinear 均速(线性运行)
    kCAMediaTimingFunctionEaseIn 先缓慢进入,再加速离开
    kCAMediaTimingFunctionEaseOut 全速开始,慢慢减速
    kCAMediaTimingFunctionEaseInEaseOut 先慢慢加速,再慢慢减速。
    kCAMediaTimingFunctionDefault 默认值.先慢慢加速,再慢慢减速,但是它加速减速速度略慢
    • fromValue 必选
      动画初始值(状态).类型:NSValue NSNumber

    • toValue 必选
      动画结束值(状态).类型:NSValue NSNumber

    • duration 必选
      每次动画时间

    • autoreverses 可选
      默认为NO,当设置为YES时,表示启用回退动画,即由toValue到fromValue做回退动画

    • removedOnCompletion 可选
      默认为YES,动画结束后从layer移除,当设置为NO时,不移除

    • fillMode 可选
      控制动画开始之前或者动画结束之后layer的行为.有以下4种类型

    类型 描述
    kCAFillModeForwards 在动画开始前,只需要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始
    kCAFillModeBackwards 当动画结束后,layer会一直保持着动画最后的状态
    kCAFillModeBoth 动画加入之后在开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态
    kCAFillModeRemoved 默认值.动画结束后,不改变layer的状态,layer会恢复到之前的状态
    • repeatCount 可选
      动画重复次数.默认为0,不可与repeatDuration同时使用.(非重复动画不用关注此参数)

    • repeatDuration 可选
      动画重复时间.不可与repeatCount同时使用,(系统会根据 repeatDuration/duration 计算出要做多少次动画).(非重复动画不用关注此参数)

    动画实现

    - (void)myAnimation {
        
        NSString *keyPath = @"position";
        CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:keyPath];
        
        // 速度控制函数,控制动画运行的节奏
        animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
        
        // YES=启用回退动画,即由toValue到fromValue做回退动画
        animation.autoreverses = YES;
        
        // YES=动画结束时从layer移除
        animation.removedOnCompletion = YES;
        
        // 控制动画开始之前或者动画结束之后`layer`的行为
        animation.fillMode = kCAFillModeForwards;
    
        // 动画初始值(状态),必须设置
        animation.fromValue = [NSValue valueWithCGPoint:self.interactView.center];
    
        // 动画结束值(状态),必须设置
        animation.toValue = [NSValue valueWithCGPoint:self.targetView.center];
        
        // 重复次数
        animation.repeatCount = INT_MAX;
     
        // 每次动画时间,必须设置
        animation.duration = 1.8;
        
        // 添加到layer,并开始动;必须设置
        [arrowView.layer addAnimation:animation forKey:keyPath];
    }
    

    上面代码的动画效果

    image

    KeyPath 列表

    Apple官方链接:CALayer Animatable Properties


    注意: CoreAnimation是作用于layer,layer并没有frame属性,所以对frame是无效的,可通过positionbounds间接实现

    相关文章

      网友评论

          本文标题:iOS核心动画(CoreAnimation)之CABasicAn

          本文链接:https://www.haomeiwen.com/subject/ryswkftx.html