CAKeyframeAnimation
之所以叫做关键帧动画是因为,这个类可以实现,某一属性按照一串的数值进行动画,就好像制作动画的时候一帧一帧的制作一样。
一般使用的时候 首先通过 animationWithKeyPath 方法 创建一个CAKeyframeAnimation实例,
CAKeyframeAnimation 的一些比较重要的属性
1. path
这是一个 CGPathRef 对象,默认是空的,当我们创建好CAKeyframeAnimation的实例的时候,可以通过制定一个自己定义的path来让 某一个物体按照这个路径进行动画。这个值默认是nil 当其被设定的时候 values 这个属性就被覆盖
2. values
一个数组,提供了一组关键帧的值, 当使用path的 时候 values的值自动被忽略。
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 50.0, 120.0);
CGPathAddLineToPoint(path, NULL, 90, 130);
CGPathAddLineToPoint(path, NULL, 40, 140);
CGPathAddLineToPoint(path, NULL, 80, 150);
CGPathAddLineToPoint(path, NULL, 30, 160);
CGPathAddLineToPoint(path, NULL, 100, 170);
//CGPathAddCurveToPoint(path,NULL,50.0,275.0,150.0,275.0,70.0,120.0); 曲线path
CAKeyframeAnimation * animation = [CAKeyframeAnimationanimationWithKeyPath:@"position"];
[animation setPath:path];
[animation setDuration:2.0f];
CFRelease(path);
[_btn.layer addAnimation:animation forKey:NULL];
以上代码就是让 _btn 按照上面path中定义的5个点进行移动,其中 的@"position"代表的是属性。
//////////////////////////////////////////////////////////////////////
例子
A、 B两面, 从A面旋转到B面然后有旋转到A面
代码片段一
CAKeyframeAnimation *theAnimation = [CAKeyframeAnimationanimation];
theAnimation.values = [NSArray arrayWithObjects:
[NSValuevalueWithCATransform3D:CATransform3DMakeRotation(0, 0,1,0)],
[NSValuevalueWithCATransform3D:CATransform3DMakeRotation(3.14/2.0f, 0,1,0)],
[NSValuevalueWithCATransform3D:CATransform3DMakeRotation(3.14, 0,1,0)],
[NSValuevalueWithCATransform3D:CATransform3DMakeRotation(3.14 + 3.14/2.0f, 0,1,0)],
[NSValuevalueWithCATransform3D:CATransform3DMakeRotation(3.14 + 3.14, 0,1,0)],
nil];
theAnimation.cumulative = YES;
theAnimation.duration = 2.0f;
theAnimation.repeatCount = 1;
theAnimation.removedOnCompletion = YES;
[_headImageView.layer addAnimation:theAnimation forKey:@"transform"];
&&&&&&&&&&&&&
代码片段二
_headImageView.animationDuration = 2;
_headImageView.animationImages = [NSArrayarrayWithObjects:[UIImageimageNamed:@"A.jpg"],
[UIImage imageNamed:@"B.jpg"],[UIImage imageNamed:@"B.jpg"],
[UIImage imageNamed:@"A.jpg"], nil];
_headImageView.animationRepeatCount = 1;
[_headImageViewstartAnimating];
上面的代码很巧妙的结合在了一起
代码片段一让headImageView旋转了360度,一共分为了4个步骤,也就是每次90度(3.14/2.0),因为在第一个90度的时候,需要从A切换到B,所以这里用到了每90度一个阶段。
代码片段二种使用了同样的时间进行了图片的切换, 4个步骤,分别使用了对应的图片。这样两者结合起来,就达到了一个完美的效果。
真TM是人才啊
CATransform3D myTransform;
myTransform = CATransform3DMakeRotation(angle, x, y, z);
该CATransform3DMakeRotation函数创建了一个转变,将在三维轴坐标系以任意弧度旋转层。x-y-z轴的有个确定的范围(介于-1 和+1之间) 。相应的坐标轴指定的值告诉系统在该轴上旋转。例如,如果X轴是设置为-1或1 ,该对象将的X轴的方向上旋转,这意味着将把它垂直旋转。把这些值看做是插入在图像每个坐标轴上的秸秆(Think of these values as inserting straws through the image for each axis.)。如果秸秆插过x轴,图像将沿着秸秆垂直旋转。您可以使用坐标轴角度值创建更复杂的旋转。。对于大多数的用途,但是,值介于-1和+1已经足够。
/////////////////////////////////////////////////
1.渐渐变淡的效果:
CAKeyframeAnimation *opacityAnimation = [CAKeyframeAnimationanimationWithKeyPath:@"opacity"];
opacityAnimation.duration = 3.0f;
opacityAnimation.values = @[@1, @0.45, @0];
opacityAnimation.keyTimes = @[@0, @0.5, @1];
[_imgView.layer addAnimation:opacityAnimation forKey:nil];
/////////////////////////////////////////////////
2.从大变小
CABasicAnimation *scaleAnimation = [CABasicAnimationanimationWithKeyPath:@"transform.scale.xy"];
scaleAnimation.fromValue = @1.0;
scaleAnimation.toValue = @0.0;
scaleAnimation.duration = 3.0f;
[_imgView.layer addAnimation:scaleAnimation forKey:nil];
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3.将上面的2个animation 放到一个 animationgroup 里面 就可以一起运行了
CAAnimationGroup * group = [CAAnimationGroupanimation];
group.duration = 3.0f;
group.repeatCount = INFINITY;
group.animations = @[scaleAnimation,opacityAnimation];
[_imgView.layeraddAnimation:group forKey:nil];
CAKeyframeAnimation的更多相关文章
- 核心动画 - CAKeyframeAnimation 简单应用
核心动画: 登录按钮的抖动效果: CAKeyframeAnimation * kfAnimation = [CAKeyframeAnimation animationWithKeyPath:@&quo ...
- Swift - 使用CAKeyframeAnimation实现关键帧动画
1,CAKeyframeAnimation介绍 CAKeyframeAnimation可以实现关键帧动画,这个类可以实现某一属性按照一串的数值进行动画,就像是一帧一帧的制作出来一样. 2,使用样例 ...
- 核心动画(CAKeyframeAnimation)
Main.storyboard ViewController.m // // ViewController.m // 8A02.核心动画 - CAKeyframeAnimation // // ...
- IOS Animation-CABasicAnimation、CAKeyframeAnimation详解&区别&联系
1.先看看网上流传的他们的继承图: 从上面可以看出CABasicAnimation与CAKeyframeAnimation都继承于CAPropertyAnimation.而CAPropertyAnim ...
- 之二:CAKeyframeAnimation - 关键帧动画
是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CA ...
- IOS第18天(6,CAKeyframeAnimation关键帧动画)
******* #import "HMViewController.h" @interface HMViewController () @property (weak, nonat ...
- IOS 核心动画之CAKeyframeAnimation - iBaby
- IOS 核心动画之CAKeyframeAnimation - 简单介绍 是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation ...
- 用CAKeyframeAnimation构建动画路径
复杂路径的动画,我们可以借助关键关键帧动画(CAKeyframeAnimation)来实现,给其的path属性设置相应的路径信息即可. 以下为一个红色的小球按照指定的路径运动的动画. 此动画关键在于如 ...
- 【原】iOSCoreAnimation动画系列教程(二):CAKeyFrameAnimation【包会】
在上一篇专题文章[原]iOSCoreAnimation动画系列教程(一):CABasicAnimation[包会]中我们学习了iOS核心动画CoreAnimation中CABasicAnimation ...
- iOS:核心动画之关键帧动画CAKeyframeAnimation
CAKeyframeAnimation——关键帧动画 关键帧动画,也是CAPropertyAnimation的子类,与CABasicAnimation的区别是: –CABasicAnimation只能 ...
随机推荐
- Eclipse安装SVN插件的方法( 手动安装)
Eclipse Svn 插件CSDN下载地址:http://download.csdn.net/source/3143260 手动安装: 1.在Eclipse根目录下建一个任意文件夹(如plugin ...
- Project Euler 95:Amicable chains 亲和数链
Amicable chains The proper divisors of a number are all the divisors excluding the number itself. Fo ...
- mysql23个知识点
1.它是一种解释语言:写一句执行一句,不需要整体编译执行. 2.1.没有“ ”,字符串使用‘ '包含 3.一个表只有一个主键,但是一个主键可以是由多个字段组成的 组合键 4.实体完整性:实体就是指一条 ...
- apache配置优化
最近参加了很多面试,多多少少有点小感悟,可以说观念转变了不少,特别是对于作为一个开发人员的定位,原来只是认为开发人员就只需要写好代码就行了,所以只需要有数据结构,算法,设计模式,重构方面的知识就行了. ...
- Lumina将是基于 Qt工具箱,旨在取代KDE成为PC-BSD默认的桌面环境
Lumina Desktop 1.1.0 发布了,该版本是重要更新,包括全新的以及完全重新编写的utilities,并对底层基础架构进行改进. Lumina将是基于 Qt工具箱,旨在取代KDE成为PC ...
- jquery.post用法
使用ajax在前端验证是否执行某个操作 jquery.post参数为 url,[data],[callback],[type] url:发送请求地址. data:待发送 Key/value 参数. c ...
- Java基础——关键字
volatile 用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值.volatile很容易被误用,用来进行原子性操作. 对于volatile修饰的变量,jvm虚拟机只 ...
- Drawable(4)LevelListDrawable
Levellist 显示时不像scale list 或 layout list那样要用代码设置一下,可以直接显示.改变level时才用代码. res:level_list.xml <?xml v ...
- Huge CSV and XML Files in Python, Error: field larger than field limit (131072)
Huge CSV and XML Files in Python January 22, 2009. Filed under python twitter facebook pinterest lin ...
- Android系列之Fragment(一)----Fragment加载到Activity当中
Android上 的界面展示都是通过Activity实现的,Activity实在是太常用了.但是Activity也有它的局限性,同样的界面在手机上显示可能很好看, 在平板上就未必了,因为平板的屏幕非常 ...