核心动画 CAAnimation 进阶

转载自:http://www.cofcool.net/development/2015/06/20/ios-study-note-nine-CoreAnimation/

Core Animation,即为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍。也就是说,使用少量的代码就可以实现非常强大的功能。Core Animation可以用在Mac OS X和iOS平台。Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程。要注意的是,Core Animation是直接作用在CALayer上的,并非UIView。

1. 使用步骤

  1. 使用它需要先添加QuartzCore.framework框架和引入主头文件<QuartzCore/QuartzCore.h>(iOS7不需要);
  2. 初始化一个CAAnimation对象,并设置一些动画相关属性;
  3. 通过调用CALayer的addAnimation:forKey:方法增加CAAnimation对象到CALayer中,这样就能开始执行动画了;
  4. 通过调用CALayer的removeAnimationForKey:方法可以停止CALayer中的动画。

2. 结构

CAAnimation是所有动画对象的父类,负责控制动画的持续时间和速度,是个抽象类,不能直接使用,应该使用它具体的子类。属性:

duration:动画的持续时间
repeatCount:动画的重复次数
repeatDuration:动画的重复时间
removedOnCompletion:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为kCAFillModeForwards
fillMode:决定当前对象在非active时间段的行为。比如动画开始之前,动画结束之后
beginTime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime()+2,CACurrentMediaTime()为图层的当前时间
timingFunction:速度控制函数,控制动画运行的节奏
delegate:动画代理

3. 子类

  1. CAPropertyAnimation,是CAAnimation的子类,也是个抽象类,要想创建动画对象,应该使用它的两个子类:CABasicAnimation和CAKeyframeAnimation。

    属性解析:

    1. keyPath:通过指定CALayer的一个属性名称为keyPath(NSString类型),并且对CALayer的这个属性的值进行修改,达到相应的动画效果。比如,指定@”position”为keyPath,就修改CALayer的position属性的值,以达到平移的动画效果。
  2. CABasicAnimation

    属性解析:

    1. fromValue:keyPath相应属性的初始值。
    2. toValue:keyPath相应属性的结束值。
    3. 随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue。
    4. 如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。比如,CALayer的position初始值为(0,0),CABasicAnimation的fromValue为(10,10),toValue为(100,100),虽然动画执行完毕后图层保持在(100,100)这个位置,实质上图层的position还是为(0,0)。
  3. CAKeyframeAnimation,CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值。

    属性解析:

    1. values:就是上述的NSArray对象。里面的元素称为”关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧。
    2. path:可以设置一个CGPathRef\CGMutablePathRef,让层跟着路径移动。path只对CALayer的anchorPoint和position起作用。如果你设置了path,那么values将被忽略。
    3. keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧.当keyTimes没有设置的时候,各个关键帧的时间是平分的。
    4. CABasicAnimation可看做是最多只有2个关键帧的CAKeyframeAnimation。
  4. CAAnimationGroup,CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行。

    属性解析:

    1. animations:用来保存一组动画对象的NSArray。
    2. 默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间。
  5. CATransition,CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。iOS比Mac OS X的转场动画效果少一点。UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果。

    属性解析:

    1. type:动画过渡类型。
    2. subtype:动画过渡方向。
    3. startProgress:动画起点(在整体动画的百分比)。
    4. endProgress:动画终点(在整体动画的百分比)。
时间: 2024-10-10 15:45:28

核心动画 CAAnimation 进阶的相关文章

核心动画——CAAnimation

核心动画——CAAnimation 需要的框架:CoreAnimation   ->  基础框架 CAAnimation 分为三大类:     处理动画的类 (基类 不能使用) ①CAPropertyAnimation         属性动画 -> 通过改变属性值产生动画效果 <1>CABasicAnimation        基础动画 -> 只能是两个点之间的变化   CASpringAnimation      弹簧动画 (弹动效果) <2>CAKeyfr

iOS 核心动画CAAnimation介绍

CAAnimation 的继承结构 CAAnimation是所有动画的父类,负责控制动画的持续时间和速度,是个抽象类,不能直接使用,要使用它的字类 1.duration:动画持续的时间 2.repeatCount:动画重复的此时,无限循环可以设置成HUGE_VALF或MAXFLOAT 3.repeatDuriation:重复时间 4.removedOnCompletion:默认为YES,代表动画完毕后就从图层上移除,图层会恢复到动画执行前的状态,如果想要动画保持结束后的状态,就将该属性设为NO,

IOS开发——UI进阶篇(十七)CALayer,核心动画基本使用

一.CALayer简介 1.CALayer在iOS中,文本输入框.一个图标等等,这些都是UIView你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层 @property(nonatomic,readonly,retain) CALayer *layer; 当UIView需

(一二二)核心动画进阶

上节我们介绍了核心动画基础,这一节介绍核心动画的主要应用和局限性. [核心动画的局限性] 有一点需要注意,所有的核心动画都是假象,只是修改了View的展示位置,而不能修改真实位置,即使设置了不复位,仿佛是位置移动了,其实layer还在原位,要证明这一点,可以在动画完成后打印layer的位置. 为了获得动画结束时机,可以通过代理,UIView已经遵循了相关协议,可以实现动画开始和结束的两个方法. - (void)animationDidStart:(CAAnimation *)anim{ } -

iOS:核心动画的详解介绍:CAAnimation(抽象类)及其子类

核心动画的详解介绍:CAAnimation(抽象类) 1.核心动画基本概念 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍! 使用它需要先添加QuartzCore.framework和引入对应的框架<QuartzCore/QuartzCore.h> ,在iOS7中不需要 2.动画分类 基本动画    CABasicAnimation 关键帧动画  CAKeyframeAnimation 动画组     CAAnimationGro

ios开发-UI进阶-核心动画-时钟动画小案例

[注意]转载时请注明出处博客园-吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/ 今天使用CALayer的"定位点(锚点)"实现了一个时钟动画,其实就是一个小的时钟,只是实现了功能,没有做出绚丽的效果.使用UIView实现的,其实只是单纯的使用layer也可以实现.主要用到了 Quartz2D画图\ 事件处理\核心动画方面的知识. 代码不是很多,直接附上源码,注释比较详细,在源码后面再进行解释其中的一些知识点和注意点. 下图为应用截图,使用gif,没有制作

IOS-CoreAnimation(核心动画)

一.核心动画 1.Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.framework和引入对应的框架<QuartzCore/QuartzCore.h> 2.开发步骤: ①初始化一个动画对象(CAAnimation)并设置一些动画相关属性 ②添加动画对象到层(CALayer)中,开始执行动画 3.CALayer中很多属性都可以通过CAAnimation实现动画效果,包括:opacity.posi

iOS核心动画Core Animation(二)

一. 使用核心动画实现动画效果的步骤 ■1. 创建动画对象 ■2. 设置动画属性 ■3. 把动画对象添加到某个 CALayer 对象上 ■4. 需要停止动画:可以调用 remove 方法移除动画 具体步骤 1.使用它需要先添加QuartzCore.framework框架和引入主头文件<QuartzCore/QuartzCore.h> 2.初始化一个CAAnimation对象,并设置一些动画相关属性 3.通过调用CALayer的addAnimation:forKey:方法增加CAAnimatio

iOS核心动画Core Animation(一)

核心动画Core Animation(一) 一.简述 Core Animation是直接作用在CALayer上的(并非UIView上)非常强大的跨Mac OS X和iOS平台的动画处理API,Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程. 二.核心动画常识 列举处核心动画的一些常识知识. 核心动画的本质:在后台移动图层中的内容,  执行完毕后图层本身的位置并没有发生变化. 如果是Xcode6之前的版本,要导入<QuartzCore/QuartzCore.h>框架,