CoreAnimation核心动画

原创 2015年11月19日 01:27:38

1、核心动画的简介

Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍。也就是说,使用少量的代码就可以实现非常强大的功能。
 Core Animation可以用在Mac OS X和iOS平台。

Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程。
 要注意的是,Core Animation是直接作用在CALayer上的,并非UIView。

2、动画使用步骤


核心动画的操作就是 QuartzCore的CALayer 图层

1.使用它需要先添加QuartzCore.framework框架和引入主头文件<QuartzCore/QuartzCore.h>(iOS7+不需要)


2.初始化一个CAAnimation对象,并设置一些动画相关属性

3.通过调用CALayer的addAnimation:forKey:方法增加CAAnimation对象到CALayer中,这样就能开始执行动画了

4.通过调用CALayer的removeAnimationForKey:方法可以停止CALayer中的动画

3、CAAnimation继承结构

这里写图片描述

4、核心动画的本质

核心动画的本质:在后台移动图层中的内容,  执行完毕后图层本身的位置并没有发生变化。

5、CAAnimation类的介绍

5.1、所有动画对象的父 类,负责控制动画的持续时间和速度,是个抽象类,不能直接使用,应该使用它具体的子类
属性解析:
duration:动画的持续时间
repeatCount:动画的重复次数
repeatDuration:动画的重复时间
removedOnCompletion:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为kCAFillModeForwards
fillMode:决定当前对象在非active时间段的行为.比如动画开始之前,动画结束之后
beginTime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime()+2,CACurrentMediaTime()为图层的当前时间
timingFunction:速度控制函数,控制动画运行的节奏

5.2、这个类的方法 整合介绍

速度控制函数(CAMediaTimingFunction)
1.kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉
2.kCAMediaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开
3.kCAMediaTimingFunctionEaseOut(渐出):动画全速进入,然后减速的到达目的地
4.kCAMediaTimingFunctionEaseInEaseOut(渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为。

CAAnimation在分类中定义了代理方法
@interface NSObject (CAAnimationDelegate)
- (void)animationDidStart:(CAAnimation *)anim;
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
@end

fillMode属性值(要想fillMode有效,最好设置removedOnCompletion=NO)
kCAFillModeRemoved 这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态
kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态 
kCAFillModeBackwards 在动画开始前,你只要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始.你可以这样设定测试代码,将一个动画加入一个layer的时候延迟5秒执行.然后就会发现在动画没有开始的时候,只要动画被加入了layer,layer便处于动画初始状态 
kCAFillModeBoth 这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状

6、CAPropertyAnimation“

是CAAnimation的子类,也是个抽象类,要想创建动画对象,应该使用它的两个子类:CABasicAnimation和CAKeyframeAnimation
属性解析:
keyPath:通过指定CALayer的一个属性名称为keyPath(NSString类型),并且对CALayer的这个属性的值进行修改,达到相应的动画效果。比如,指定@”position”为keyPath,就修改CALayer的position属性的值,以达到平移的动画效果

7、CABasicAnimation

CAPropertyAnimation的子类
属性解析:
fromValue:keyPath相应属性的初始值
toValue:keyPath相应属性的结束值
随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue
如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。比如,CALayer的position初始值为(0,0),CABasicAnimation的fromValue为(10,10),toValue为(100,100),虽然动画执行完毕后图层保持在(100,100)这个位置,实质上图层的position还是为(0,0)

具体常见的我用户距离?

 1. `// 平移动画
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position"];
anim.duration = 1; // 动画持续1秒
// 因为CGPoint是结构体,所以用NSValue包装成一个OC对象
anim.fromValue = [NSValue valueWithCGPoint:CGPointMake(50, 50)];
anim.toValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
[layer addAnimation:anim forKey:@"MyAnim"];
// 通过MyAnim可以取回相应的动画对象,比如用来中途取消动画

// 缩放动画
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];
// 没有设置fromValue说明当前状态作为初始值
// 宽度(width)变为原来的2倍,高度(height)变为原来的1.5倍
anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(2, 1.5, 1)];
anim.duration = 1;
[layer addAnimation:anim forKey:nil];

// 旋转动画
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];
// 这里是以向量(1, 1, 0)为轴,旋转π/2弧度(90°)
// 如果只是在手机平面上旋转,就设置向量为(0, 0, 1),即Z轴
anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_2, 1, 1, 0)];
anim.duration = 1;
[layer addAnimation:an



im forKey:nil];
`

CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行
属性解析:
animations:用来保存一组动画对象的NSArray
默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间

CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行
属性解析:
animations:用来保存一组画对象的NSArray
默认情况下,一组动画对象是同时
在整体动画百分比)

转场动画过渡效果
这里写图片描述

相关文章推荐

动画2-CoreAnimation核心动画

  • 2015年10月30日 23:42
  • 3.03MB
  • 下载

iOS核心动画之CoreAnimation

本文目录 一、Core Animation简介二、Core Animation的使用步骤三、CAAnimation四、CAPropertyAnimation 回到顶部 ...

iOS学习笔记09-核心动画CoreAnimation

一、CALayerCALayer包含在QuartzCore框架中,具有跨平台性,在iOS中使用Core Animation开发动画的本质是 将CALayer内容转化为位图从而供硬件操作 。常用属性: ...

CoreAnimation 核心动画 简称CA

-、动画块fram bounds center alpha Transition 过渡 transform我们之前使用过的UIView动画 其实本质上也是 CoreAnimation实现的 只...

关于coreAnimation 核心动画的学习笔记(3)

第二章 核心动画渲染框架 可能有人会很好奇CoreAnimation是如何渲染动画,动画是如何生成的。 在core aniamtion和cocoa view之间有很大的相似之处,他们之间最大的概念上的...

核心动画 CoreAnimation、CALayer详解

核心动画 CoreAnimation    第一章 核心动画概念 核心动画,开发人员可以为他们的应用创建动态用户界面,而无需使用低级别的图形 API,如 OpenGL 来获取高效的动...

核心动画 CoreAnimation

原文地址:http://www.cnblogs.com/pengyingh/articles/2396032.html 转载保存,以后用到的话再看看!  第一章 核心动画概念 ...
  • mqlsq
  • mqlsq
  • 2012年05月03日 17:24
  • 486

关于coreAnimation 核心动画的学习笔记(5)

3.5 图层的内容 图层的内容提供,是指通过一种方法来制定CALayer 实例的内容: 其中有一下三种方式来提供CAlayer的内容  (1)使用包含图片内容的 CGImageRef 来显式的设置图层...

IOS_核心动画 CoreAnimation

原文:http://www.cnblogs.com/pengyingh/articles/2396032.html 第一章 核心动画概念 核心动画,开发人员可以为他们的应用创建动态用户界面,而无需...

关于coreAnimation 核心动画的学习笔记(2)

1.1.1 图层类    层类(Layer Classes)   Layer Classes是core animation的基础。Layer Classes提供了一个抽象的概念,这个概念对...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CoreAnimation核心动画
举报原因:
原因补充:

(最多只允许输入30个字)