Core Animation

Core Animation。中文翻译为核心动画,它是一组很强大的动画处理API,使用它能做出很炫丽的动画效果。并且往往是事半功倍。

也就是说,使用少量的代码就能够实现很强大的功能。

Core Animation能够用在Mac OS X和iOS平台。

Core Animation的动画运行过程都是在后台操作的,不会堵塞主线程。

要注意的是,Core Animation是直接作用在CALayer上的,并不是UIView。

乔帮主在2007年的WWDC大会上亲自为你演示Core Animation的强大

假设是xcode5之前的版本号,使用它须要先加入QuartzCore.framework和引入相应的框架<QuartzCore/QuartzCore.h>
开发步骤:
1.使用它须要先加入QuartzCore.framework框架和引入主头文件<QuartzCore/QuartzCore.h>
2.初始化一个CAAnimation对象。并设置一些动画相关属性
3.通过调用CALayer的addAnimation:forKey:方法添加CAAnimation对象到CALayer中。这样就能開始运行动画了
4.通过调用CALayer的removeAnimationForKey:方法能够停止CALayer中的动画

CAAnimation继承结构

注意:图中的黑色虚线代表“继承”某个类,红色虚线代表“遵守”某个协议

CAAnimation简单介绍

是全部动画对象的父类,负责控制动画的持续时间和速度,是个抽象类。不能直接使用,应该使用它详细的子类

属性说明:(红色代表来自CAMediaTiming协议的属性)

duration:动画的持续时间

repeatCount:反复次数,无限循环能够设置HUGE_VALF或者MAXFLOAT

repeatDuration:反复时间

removedOnCompletion:默觉得YES,代表动画运行完成后就从图层上移除。图形会恢复到动画运行前的状态。假设想让图层保持显示动画运行后的状态。那就设置为NO,只是还要设置fillMode为kCAFillModeForwards

fillMode:决定当前对象在非active时间段的行为。比方动画開始之前或者动画结束之后

beginTime:能够用来设置动画延迟运行时间。若想延迟2s。就设置为CACurrentMediaTime()+2,CACurrentMediaTime()为图层的当前时间

timingFunction:速度控制函数,控制动画运行的节奏

delegate:动画代理

CAAnimation动画填充模式

fillMode属性值(要想fillMode有效,最好设置removedOnCompletion = NO)

kCAFillModeRemoved 这个是默认值,也就是说当动画開始前和动画结束后。动画对layer都没有影响。动画结束后。layer会恢复到之前的状态

kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态

kCAFillModeBackwards 在动画開始前。仅仅须要将动画加入了一个layer,layer便马上进入动画的初始状态并等待动画開始。

kCAFillModeBoth 这个事实上就是上面两个的合成.动画加入后開始之前。layer便处于动画初始状态,动画结束后layer保持动画最后的状态

CAAnimation速度控制函数

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

CAAnimation动画代理方法

CAAnimation在分类中定义了代理方法

@interface NSObject (CAAnimationDelegate)

/* Called when the animation begins its active duration. */

- (void)animationDidStart:(CAAnimation *)anim;

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

@end

CALayer上动画的暂停和恢复

-(void)pauseLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; // 让CALayer的时间停止走动
layer.speed = 0.0;
// 让CALayer的时间停留在pausedTime这个时刻
layer.timeOffset = pausedTime;
}
#pragma mark 恢复CALayer的动画
-(void)resumeLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = layer.timeOffset;
// 1. 让CALayer的时间继续行走
layer.speed = 1.0;
// 2. 取消上次记录的停留时刻
layer.timeOffset = 0.0;
// 3. 取消上次设置的时间
layer.beginTime = 0.0;
// 4. 计算暂停的时间(这里也能够用CACurrentMediaTime()-pausedTime)
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
// 5. 设置相对于父坐标系的開始时间(往后退timeSincePause)
layer.beginTime = timeSincePause;
}

CAPropertyAnimation

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

CABasicAnimation

CAKeyframeAnimation

属性说明:

keyPath:通过指定CALayer的一个属性名称为keyPath(NSString类型),并且对CALayer的这个属性的值进行改动,达到相应的动画效果。

比方,指定@“position”为keyPath。就改动CALayer的position属性的值,以达到平移的动画效果

CABasicAnimation基本动画

基本动画,是CAPropertyAnimation的子类

属性说明:

fromValue:keyPath相应属性的初始值

toValue:keyPath相应属性的结束值

动画过程说明:

随着动画的进行。在长度为duration的持续时间内。keyPath相应属性的值从fromValue渐渐地变为toValue

keyPath内容是CALayer的可动画Animatable属性

假设fillMode=kCAFillModeForwards同一时候removedOnComletion=NO。那么在动画运行完成后,图层会保持显示动画运行后的状态。但在实质上。图层的属性值还是动画运行前的初始值。并没有真正被改变。

CAKeyframeAnimation关键帧动画

关键帧动画,也是CAPropertyAnimation的子类,与CABasicAnimation的差别是:

CABasicAnimation仅仅能从一个数值(fromValue)变到还有一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值

属性说明:

values:上述的NSArray对象。

里面的元素称为“关键帧”(keyframe)。动画对象会在指定的时间(duration)内。依次显示values数组中的每个关键帧

path:能够设置一个CGPathRef、CGMutablePathRef。让图层依照路径轨迹移动。

path仅仅对CALayer的anchorPoint和position起作用。

假设设置了path。那么values将被忽略

keyTimes:能够为相应的关键帧指定相应的时间点,其取值范围为0到1.0。keyTimes中的每个时间值都相应values中的每一帧。假设没有设置keyTimes,各个关键帧的时间是平分的

CABasicAnimation可看做是仅仅有2个关键帧的CAKeyframeAnimation

CAAnimationGroup动画组

动画组,是CAAnimation的子类。能够保存一组动画对象,将CAAnimationGroup对象加入层后,组中全部动画对象能够同一时候并发运行

属性说明:

animations:用来保存一组动画对象的NSArray

默认情况下,一组动画对象是同一时候运行的。也能够通过设置动画对象的beginTime属性来更改动画的開始时间

CATransition转场动画

CATransition是CAAnimation的子类。用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。

iOS比Mac OS X的转场动画效果少一点

UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果

动画属性:

type:动画过渡类型

subtype:动画过渡方向

startProgress:动画起点(在总体动画的百分比)

endProgress:动画终点(在总体动画的百分比)

转场动画过渡效果

使用UIView动画函数实现转场动画 单视图

+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;

參数说明:
//duration:动画的持续时间
//view:须要进行转场动画的视图
//options:转场动画的类型
//animations:将改变视图属性的代码放在这个block中
//completion:动画结束后,会自己主动调用这个block

使用UIView动画函数实现转场动画 双视图

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion;

參数说明:
//duration:动画的持续时间
//options:转场动画的类型
//animations:将改变视图属性的代码放在这个block中
//completion:动画结束后。会自己主动调用这个block

CADisplayLink

CADisplayLink是一种以屏幕刷新频率触发的时钟机制,每秒钟运行大约60次左右

CADisplayLink是一个计时器,能够使画图代码与视图的刷新频率保持同步,而NSTimer无法确保计时器实际被触发的准确时间

用法:

定义CADisplayLink并制定触发调用方法

将显示链接加入到主运行循环队列

iOS开发 - Core Animation 核心动画的更多相关文章

  1. iOS - Core Animation(核心动画)

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

  2. iOS - Core Animation 核心动画

    1.UIView 动画 具体讲解见 iOS - UIView 动画 2.UIImageView 动画 具体讲解见 iOS - UIImageView 动画 3.CADisplayLink 定时器 具体 ...

  3. iOS开发UI篇—核心动画简介

    转自:http://www.cnblogs.com/wendingding/p/3801036.html iOS开发UI篇—核心动画简介 一.简单介绍 Core Animation,中文翻译为核心动画 ...

  4. iOS开发UI篇—核心动画(UIView封装动画)

    iOS开发UI篇—核心动画(UIView封装动画) 一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画 ...

  5. iOS开发UI篇—核心动画(转场动画和组动画)

    转自:http://www.cnblogs.com/wendingding/p/3801454.html iOS开发UI篇—核心动画(转场动画和组动画) 一.转场动画简单介绍 CAAnimation的 ...

  6. iOS开发UI篇—核心动画(关键帧动画)

    转自:http://www.cnblogs.com/wendingding/p/3801330.html iOS开发UI篇—核心动画(关键帧动画) 一.简单介绍 是CApropertyAnimatio ...

  7. iOS开发UI篇—核心动画(基础动画)

    转自:http://www.cnblogs.com/wendingding/p/3801157.html 文顶顶 最怕你一生碌碌无为 还安慰自己平凡可贵 iOS开发UI篇—核心动画(基础动画) iOS ...

  8. iOS开发基础知识:Core Animation(核心动画)

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

  9. iOS - Core Animation 核心动画的使用

    1.简单使用示例 1.1 时钟 QClockView.h @interface QClockView : UIView /// 创建时钟界面 + (instancetype)q_clockViewWi ...

随机推荐

  1. oracle表复制

    1. 复制表结构及其数据:   create table table_name_new as select * from table_name_old        2. 只复制表结构:   crea ...

  2. Java文件管理系统

    上一个版本设计参照了 windows 资源管理器的原则,使用了多年.也发现了少许问题,也许是我们应用场景不一样... 目前的设计结合了目前的云概念.目录采用的是虚拟方式和实际的目录无关,只是存在一定的 ...

  3. 一幅图秒懂LoadAverage(负载)

    转自:http://www.habadog.com/2015/02/27/what-is-load-average/ 一幅图秒懂LoadAverage(负载)   一.什么是Load Average? ...

  4. Mybatis ResultMap Collection 复合主键

    <resultMap type="XX" id="XXMap">          <id property="id" c ...

  5. Android5.0新控件RecyclerVIew的介绍和兼容使用的方法

    第一部分 RecyclerVIew是一个可以替代listview和Gallery的有效空间而且在support-v7中有了低版本支持,具体使用方式还是规规矩矩的适配器加控件模式.我们先来看看官网的介绍 ...

  6. [Ubuntu] fg、bg让你的进程在前后台之间切换

    refer to  : http://man.linuxde.net/jobs Linux下的fg和bg命令是进程的前后台调度命令,即将指定号码(非进程号)的命令进程放到前台或后台运行.比如一个需要长 ...

  7. HTML5 浏览器返回按钮/手机返回按钮事件监听

    1.HTML5  History对象 支持使用pushState()方法修改地址栏地址,而不刷新页面. popstate事件 当history实体被改变时,popstate事件将会发生.调用pushS ...

  8. 浅谈volatile与automicInteger

    在并发环境中有三个因素需要慎重考量,原子性.可见性.有序性.   voatile 保证了有序性(防止指令冲排序)和变量的内存可见性(每次都强制取主存数据),每次取到volatile变量一定是最新的  ...

  9. ss简单使用

    ss简单使用 ss即socket state. 1.常用语句 ss -l 显示所有处于监听的网络接口连接 ss -pl 显示所有处于监听的网络接口连接,及相应的进程名称.进号等 ss -t -a 显示 ...

  10. Visual Studio 2013中引入Web Service的简单方法visual studio 引用 wsdl

    http://blog.csdn.net/wangzhongbo_24/article/details/49954191 Web Service有三种表示方式 三种方式分别为WSDL.Endpoint ...