核心动画的接触点滴(三)

本篇记录的是核心动画的中的CApropertyAnimation中的关键帧动画部分。非常有用:

关键帧动画是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

第一种使用方法:

//给指定view添加关键帧动画(使用帧数组的方式)

-(void)addKeyFrameAnimationOnView:(UIView *)view

{

//1.创建核心动画(帧动画)

CAKeyframeAnimation *keyAnima=[CAKeyframeAnimation animation];

//使用平移的方式//平移

keyAnima.keyPath=@"position";

//告诉系统要执行什么动画

NSValue *value1=[NSValue valueWithCGPoint:CGPointMake(100, 100)];

NSValue *value2=[NSValue valueWithCGPoint:CGPointMake(200, 100)];

NSValue *value3=[NSValue valueWithCGPoint:CGPointMake(200, 200)];

NSValue *value4=[NSValue valueWithCGPoint:CGPointMake(100, 200)];

NSValue *value5=[NSValue valueWithCGPoint:CGPointMake(100, 100)];

//加入帧动画数组

keyAnima.values=@[value1,value2,value3,value4,value5];

//设置动画执行完毕后,不删除动画

keyAnima.removedOnCompletion=NO;

//设置保存动画的最新状态

keyAnima.fillMode=kCAFillModeForwards;

//设置动画执行的时间

keyAnima.duration=1.0;

//设置动画的节奏(开始和结束时的快慢)

keyAnima.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

//设置代理,开始—结束

[view.layer addAnimation:keyAnima forKey:nil];

}

可以看得出来,这个和之前的基本动画里的平移动画类似,只不过它的value变成了一个数组了,其中设置的动画的执行节奏有如下几种:(可以自己去尝试)

kCAMediaTimingFunctionLinear

kCAMediaTimingFunctionEaseIn

kCAMediaTimingFunctionEaseOut

kCAMediaTimingFunctionEaseInEaseOut

kCAMediaTimingFunctionDefault

第二种方法(使用path),让layer在指定的路径上移动

-(void)addKeyFrameAnimationOnView2:(UIView *)view

{

CAKeyframeAnimation *keyAnima = [CAKeyframeAnimation animation];

keyAnima.keyPath = @"position";

keyAnima.duration = 1.0f;

//创建一条路径

CGMutablePathRef path = CGPathCreateMutable();

//设置一个圆的路径

CGPathAddEllipseInRect(path, NULL, CGRectMake(Width/2, Height/2+100, 50, 50));

keyAnima.path = path;   //记得一定要设置

//release

CGPathRelease(path);

//取消执行完后移除动画

keyAnima.removedOnCompletion = NO;

//设置保存动画的最新状态

keyAnima.fillMode = kCAFillModeForwards;

//设置动画的节奏(这里选择渐入渐出)

keyAnima.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

[view.layer addAnimation:keyAnima forKey:nil];

}

停止动画调用方法: removeAnimationForKey:即可(前提是要知道需要停止的动画之前被赋予的key,才能匹配并停止)

视图的抖动:

//给指定视图

#define angle2Radian(angle)  ((angle)/180.0*M_PI)  //获取自定义弧度

添加抖动动画

-(void)addRotationAnimationOnView:(UIView *)view

{

CAKeyframeAnimation *keyAnima = [CAKeyframeAnimation animation];

keyAnima.keyPath = @"transform.rotation";

keyAnima.duration = 0.1f;

//设置视图的抖动弧度(其实还是帧动画)

CGFloat  angel = 5.0;

keyAnima.values=@[@(-angle2Radian(angel)),@(angle2Radian(angel)),@(-angle2Radian(angel))];

keyAnima.removedOnCompletion = YES;

keyAnima.repeatCount = 2;

keyAnima.fillMode = kCAFillModeForwards;

[view.layer addAnimation:keyAnima forKey:nil];

}

写法跟帧动画没有太大区别,只是要设置一下重复的次数和完成后移除动画

时间: 2024-08-13 23:50:38

核心动画的接触点滴(三)的相关文章

核心动画的接触点滴(一)

本周项目进展仍然没有太大变化,于是接着上周未完成的计划,开始着手对核心动画开始做学习了解和记录. OS开发UI篇-核心动画简介 一.简单介绍 Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core Animation是跨平台的,可以用在Mac OS X和iOS平台. Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程.不阻塞主线程,

核心动画的接触点滴(二)

本篇记录核心动画中基础动画的使用: 一.简单介绍 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue 如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行        

核心动画的接触点滴(四)

一.转场动画接受 CAAnimation的子类,用于做转场特效,可以为层做移入或移除屏幕的动画效果.比如像UINavigationController就是使用的转场动画进行页面的推出和进入的. 包含属性: type:动画的过渡类型(以何种方式进行执行转场动画) subtype:过渡方向 startProgress:起始点(在整体动画的百分比) endProgress:终结点(在整体动画的百分比) 二.代码示例 { //创建转场动画实例 CATransition *CTAnima = [CATra

核心动画的接触点滴(五)

1.简单介绍 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画支持.动画的执行过程全部由UIView类自动完成,我们只需要通过调用[UIView beginAnimations: nil context:nil]和[UIView commitAnimations]这2个方法来通知视图即可. 常用的方法说明: + (void)setAnimationDelegate:(id)delegate   --------  设置动画代理对象,当动画开

CoreAnimation编程指南(一)核心动画基础

什么是核心动画 核心动画是一个图形渲染和动画基础设施可在iOS和OS X,你使用的动画的看法和你的应用程序的其他视觉元素.核心动画,大部分的工作需要画出每一帧的动画是为你做的.所有您需要做的就是配置一些动画参数(如起点和终点)告诉核心动画开始.核心动画不休息,把最实际的绘图工作了板载图形硬件加速渲染.这种自动图形加速的结果在高帧速率和流畅的动画,而不增加CPU和减慢你的应用. 如果你正在写的iOS应用程序,您使用的是核心动画无论你是否知道.如果你正在写的OS X应用程序,你可以利用非常小的努力核

iOS核心动画高级技巧之核心动画(三)

iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结(五) 隐式动画 隐式动画主要作用于CALayer的可动画属性上面,UIView对应的layer是不可以的,只要你改变属性的值,它不是突兀的直接改变过去,而是一个有一个动画的过程,这个时间等属性你可以通过事务(CATransaction)来控制,如果你不自己提供一个事务,它的默认时间是0.25秒,当然

猫猫学IOS(三十九)UI之核心动画之CABasicAnimation(基础动画)

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 一.CABasicAnimation简介 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue 如

猫猫学IOS(三十八)UI之核心动画简介

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 核心动画(简介) Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core Animation可以用在Mac OS X和iOS平台. Core Animation的动画执行过程都是在后台操

IOS-CoreAnimation(核心动画)

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