是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值,就可以实现CALayer的某一属性按照一串的数值进行动画,就好像制作动画的时候一帧一帧的制作一样。

几个关键属性:

  • values:就是上述的NSArray对象。里面的元素称为”关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧
  • path:设置一个CGPathRef\CGMutablePathRef的路径对象,默认nil,让CALayer跟着路径移动。path只对CALayer的anchorPoint(锚点)和position(位置)起作用。如果你设置了path,那么values将被忽略
  • keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧.当keyTimes没有设置的时候,各个关键帧的时间是平分的

说明:CABasicAnimation可看做是最多只有2个关键帧的CAKeyframeAnimation

- Values方式

 // 创建5个关键帧的点对象
CGPoint p1 = CGPointMake(, );
CGPoint p2 = CGPointMake(, );
CGPoint p3 = CGPointMake(, );
CGPoint p4 = CGPointMake(, );
CGPoint p5 = CGPointMake(, ); // 将创建的关键帧放入数组中,用NSValue结构体类型转化成对象
NSArray *values = [NSArray arrayWithObjects:[NSValue valueWithCGPoint:p1], [NSValue valueWithCGPoint:p2], [NSValue valueWithCGPoint:p3], [NSValue valueWithCGPoint:p4], [NSValue valueWithCGPoint:p5], nil]; CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; // 给Values属性赋值
[animation setValues:values]; // 动画完成后保持最新状态
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards; animation.duration = 4.0; // 动画定时函数属性
animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; animation.delegate=self; [self.myView.layer addAnimation:animation forKey:nil];
  • 第23行:timingFunction 用于变化起点和终点之间的插值计算,形象点说它决定了动画运行的节奏
  1. kCAMediaTimingFunctionLinear            线性,即匀速
  2. kCAMediaTimingFunctionEaseIn            先慢后快
  3. kCAMediaTimingFunctionEaseOut           先快后慢
  4. kCAMediaTimingFunctionEaseInEaseOut     先慢后快再慢
  5. kCAMediaTimingFunctionDefault           实际效果是动画中间比较快.
  • 注意:当上面的预置不能满足你的需求的时候,你可以使用下面的两个方法来自定义你的timingFunction 

*  + (id)functionWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y;

*  - (id)initWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y;

- Path方式:

 CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

 CGMutablePathRef myPath = CGPathCreateMutable();

 // 将路径的起点定位到(50, 120)
CGPathMoveToPoint(myPath, NULL, 50.0, 120.0); // 添加5条直线的路径到myPath中
CGPathAddLineToPoint(myPath, NULL, , );
CGPathAddLineToPoint(myPath, NULL, , );
CGPathAddLineToPoint(myPath, NULL, , );
CGPathAddLineToPoint(myPath, NULL, , );
CGPathAddLineToPoint(myPath, NULL, , ); // 添加4条曲线路径到myPath中
CGPathAddCurveToPoint(myPath,NULL,50.0,275.0,150.0,275.0,70.0,120.0);
CGPathAddCurveToPoint(myPath,NULL,150.0,275.0,250.0,275.0,90.0,120.0);
CGPathAddCurveToPoint(myPath,NULL,250.0,275.0,350.0,275.0,110.0,120.0);
CGPathAddCurveToPoint(myPath,NULL,350.0,275.0,450.0,275.0,130.0,120.0); //以"position"为关键字创建 实例
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; // 是否动画回到原位
[animation setAutoreverses:YES]; // 设置path属性
animation.path = myPath; // 释放路径
CGPathRelease(myPath); animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards; animation.duration = 4.0; animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; animation.delegate=self; [self.myView.layer addAnimation:animation forKey:nil];

- 其他属性

  • calculationMode 这个属性用来设定 关键帧中间的值是怎么被计算的

之二:CAKeyframeAnimation - 关键帧动画的更多相关文章

  1. core Animation之CAKeyframeAnimation(关键帧动画)

    CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSA ...

  2. iOS之CAKeyframeAnimation关键帧动画详解

    CABasicAnimation算是CAKeyFrameAnimation的 特殊情况,即不考虑中间变换过程,只考虑起始点与目标点就可以了.而CAKeyFrameAnimation则更复杂一些,允许我 ...

  3. IOS第18天(6,CAKeyframeAnimation关键帧动画)

    ******* #import "HMViewController.h" @interface HMViewController () @property (weak, nonat ...

  4. iOS:核心动画之关键帧动画CAKeyframeAnimation

    CAKeyframeAnimation——关键帧动画 关键帧动画,也是CAPropertyAnimation的子类,与CABasicAnimation的区别是: –CABasicAnimation只能 ...

  5. Silverlight动画的基本知识、关键帧动画

    基础知识 (一)动画:是快速播放一系列图像(其中每个图像与下一个图像略微不同)给人造成的一种幻觉 (二)动画类型:两类    (1)From/To/By动画:在起始值和结束值之间进行动画处理.     ...

  6. CSS3过渡动画&关键帧动画

    一.过渡动画 过渡(transition)动画,就是从初始状态过渡到结束状态这个过程中所产生的动画. 所谓的状态就是指大小.位置.颜色.变形(transform)等等这些属性. Note:不是所有属性 ...

  7. Swift - 使用CAKeyframeAnimation实现关键帧动画

    1,CAKeyframeAnimation介绍 CAKeyframeAnimation可以实现关键帧动画,这个类可以实现某一属性按照一串的数值进行动画,就像是一帧一帧的制作出来一样.   2,使用样例 ...

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

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

  9. ios基础动画、关键帧动画、动画组、转场动画等

    概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画 ...

随机推荐

  1. 参与github上开源项目的大致流程和注意事项

    Foreword github是一个很火的代码托管服务网站,可能好多人都想参与一两个项目玩一玩学习一下,但由于是纯英文的网站,可能又会止步于想法上没有动手实践.接下来我就介绍一下参与github上开源 ...

  2. 微软公有云Windows Azure 2014-03-26 国内正式商用

    新浪科技讯 3月27日早间消息,微软国昨天下午宣布由世纪互联负责运营的Microsoft Azure公有云服务正式商用.这是国内首个正式商用的国际公有云服务平台.而开正式开放商用,意味着任何企业现在都 ...

  3. Architecture Pattern: Publish-subscribe Pattern

    1. Brief 一直对Observer Pattern和Pub/Sub Pattern有所混淆,下面打算通过这两篇Blog来梳理这两种模式.若有纰漏请大家指正. 2. Role Publisher: ...

  4. C# 目录(文件夹)复制实现

    private static void CopyDir(DirectoryInfo origin, string target) { if (!target.EndsWith("\\&quo ...

  5. 使用jquery的append(content)方法的注意事项

    append(content)函数:向每个匹配的元素内部追加内容. 如以下示例: 向所有段落中追加一些HTML标记. HTML 代码: <p>I would like to say: &l ...

  6. 【处理手记】Configuration system failed to initialize异常的另类原因

    有个c#程序在某台电脑上,执行某个操作时,总是会报如图错误: 度娘一番,发现市面上常见的原因是配置文件中的特定节点的位置不对,或者配置文件损坏等等,而这个程序根本没有使用内置的配置文件方案,而是用的i ...

  7. 基于类型系统的面向对象编程语言Go

    (整理自网络) 面向对象编程 Go语言的面向对象编程(OOP)非常简洁而优雅.说它简洁,在于它没有了OOP中很多概念,比如:继承.虚函数.构造函数和析构函数.隐藏的this指针等等.说它优雅,是它的面 ...

  8. VIRTUALBOX 虚拟机安装 OS X 10.9 MAVERICKS

    VIRTUALBOX 虚拟机安装 OS X 10.9 MAVERICKS 原文链接:http://bbs.weiphone.com/read-htm-tid-7625465.html 原文作者已经写的 ...

  9. Android 手机卫士2--home页面

    1,自定义获取焦点的TextView FocusTextView.java package com.itheima.mobilesafe74.view; import android.content. ...

  10. 服务器端高性能的IO模型 转自酷勤网

    服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(BlockingIO):即传统的IO模型. (2)同步非阻塞IO(Non-blockingIO):默认创建的soc ...