今天漫谈一下ios动画中抖动动画效果的实现,该动画主要具有引人注意的效果,具有灵动性的提示性,它有时便似一个美女在春风中向你招手,有这迷人的微笑与不可抗拒的魔力;有时似一个小动物,那么的可爱那么的讨人喜欢,便忍不住去触摸它、爱扶它;有时似一个魔法棒,有着高深的不可抗拒的法力,让你忍不住去走进他,一览它那无穷的充满魅力的法力。就看怎么去利用它,挖掘它那无穷的宝藏。下面以消消乐中的例子作为剖析。
其中,我们可以看到左边的小熊与右边的签到,都在不停的上下的抖动,充满了诱惑,让人忍不去去点开小熊闯关,点开签到进行签到。动画可能展示的不是很好。
那么,我们该怎么去实现这种效果呢?首先我们温习一个CALayer
CALayer是动画中常用的对象,它包含在QuartzCore框架中,这是一个跨平台的框架,既可以用在iOS中又可以用在Mac OS X中。在使用Core Animation开发动画的本质就是将CALayer中的内容转化为位图从而供硬件操作,所以要熟练掌握动画操作必须先来熟悉CALayer。
其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层,在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层
@property(nonatomic,readonly,retain) CALayer *layer;
当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示。换句话说,UIView本身不具备显示的功能,拥有显示功能的是它内部的图层。
所以,UIView之所以能够显示,完全是因为内部的CALayer对象。因此,通过操作这个CALayer对象,可以很方便地调整UIView的一些界面属性,比如:阴影、圆角大小、边框宽度和颜色等。
在Core Animation中我们操作更多的则不再是UIView而是直接面对CALayer。
在iOS中CALayer的设计主要是了为了内容展示和动画操作,CALayer本身并不包含在UIKit中,它不能响应事件。我们要特别注意这一点,不能影响事件,它的许多属性的修改都能形成动画效果。下面简单了解一下CALayer的属性。
anchorPoint 和中心点position重合的一个点,称为“锚点”,锚点的描述是相对于x、y位置比例而言的默认在图像中心点(0.5,0.5)的位置
backgroundColor 图层背景颜色
borderColor 边框颜色
borderWidth 边框宽度
bounds 图层大小
contents 图层显示内容,例如可以将图片作为图层内容显示
contentsRect 图层显示内容的大小和位置
cornerRadius 圆角半径
doubleSided 图层背面是否显示,默认为YES
frame 图层大小和位置,不支持隐式动画,所以CALayer中很少使用frame,通常使用bounds和position代替
hidden 是否隐藏
......
那对与本文提到的动画,该如何实现呢?
首先,我们需要定义并加载。
//演员初始化
CALayer*scaleLayer = [[CALayer alloc]init];
scaleLayer.backgroundColor = [UIColor blueColor].CGColor;
scaleLayer.frame = CGRectMake(160, 20+100, 50, 50);
scaleLayer.cornerRadius = 40; //圆角
[self.view.layer addSublayer:scaleLayer]; //添加。,特别注意
然后我们需要做出安排,也就类似一个剧本,利用CABaseicAnimation,对其设定产生剧本。通过-setFromValue 和-setToValue 来指定一个开始值和结束值。 当你增加基础动画到层中的时候,它开始运行。当用属性做动画完成时,例如用位置属性做动画,层就会立刻 返回到它的初始位置,它也有自己的属性。
//设定剧本 ...CABaseicAnimation的设定
CABasicAnimation*scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
//transform.scale: x轴,y轴同时按比例缩放:
scaleAnimation.fromValue = [NSNumber numberWithFloat:1.0]; //从 from
scaleAnimation.toValue = [NSNumber numberWithFloat:1.5]; //to
scaleAnimation.autoreverses = YES;
scaleAnimation.fillMode = kCAFillModeBackwards;
scaleAnimation.repeatCount = 100; //重复次数 from到to
scaleAnimation.duration = 0.8; //一次时间
有了角色有了剧本,我们就可以开演了。
//开演
[scaleLayer addAnimation:scaleAnimation forKey:@"scaleAnimation"]; //key -- value.
至此,我们通过设定角色 ,设定剧本,开演的形式完成一个动画,其中剧本,我们可以设置成一组动画,例如:
CAAnimationGroup* groupAnnimation = [CAAnimationGroup animation];
groupAnnimation.duration = 2;
groupAnnimation.autoreverses = YES;
groupAnnimation.animations = @[animationOne,AnimationTwo];
//开演
其中,我们可以看到左边的小熊与右边的签到,都在不停的上下的抖动,充满了诱惑,让人忍不去去点开小熊闯关,点开签到进行签到。动画可能展示的不是很好。
那么,我们该怎么去实现这种效果呢?首先我们温习一个CALayer
CALayer是动画中常用的对象,它包含在QuartzCore框架中,这是一个跨平台的框架,既可以用在iOS中又可以用在Mac OS X中。在使用Core Animation开发动画的本质就是将CALayer中的内容转化为位图从而供硬件操作,所以要熟练掌握动画操作必须先来熟悉CALayer。
其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层,在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层
@property(nonatomic,readonly,retain) CALayer *layer;
当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示。换句话说,UIView本身不具备显示的功能,拥有显示功能的是它内部的图层。
所以,UIView之所以能够显示,完全是因为内部的CALayer对象。因此,通过操作这个CALayer对象,可以很方便地调整UIView的一些界面属性,比如:阴影、圆角大小、边框宽度和颜色等。
在Core Animation中我们操作更多的则不再是UIView而是直接面对CALayer。
在iOS中CALayer的设计主要是了为了内容展示和动画操作,CALayer本身并不包含在UIKit中,它不能响应事件。我们要特别注意这一点,不能影响事件,它的许多属性的修改都能形成动画效果。下面简单了解一下CALayer的属性。
anchorPoint 和中心点position重合的一个点,称为“锚点”,锚点的描述是相对于x、y位置比例而言的默认在图像中心点(0.5,0.5)的位置
backgroundColor 图层背景颜色
borderColor 边框颜色
borderWidth 边框宽度
bounds 图层大小
contents 图层显示内容,例如可以将图片作为图层内容显示
contentsRect 图层显示内容的大小和位置
cornerRadius 圆角半径
doubleSided 图层背面是否显示,默认为YES
frame 图层大小和位置,不支持隐式动画,所以CALayer中很少使用frame,通常使用bounds和position代替
hidden 是否隐藏
......
那对与本文提到的动画,该如何实现呢?
首先,我们需要定义并加载。
//演员初始化
CALayer*scaleLayer = [[CALayer alloc]init];
scaleLayer.backgroundColor = [UIColor blueColor].CGColor;
scaleLayer.frame = CGRectMake(160, 20+100, 50, 50);
scaleLayer.cornerRadius = 40; //圆角
[self.view.layer addSublayer:scaleLayer]; //添加。,特别注意
然后我们需要做出安排,也就类似一个剧本,利用CABaseicAnimation,对其设定产生剧本。通过-setFromValue 和-setToValue 来指定一个开始值和结束值。 当你增加基础动画到层中的时候,它开始运行。当用属性做动画完成时,例如用位置属性做动画,层就会立刻 返回到它的初始位置,它也有自己的属性。
//设定剧本 ...CABaseicAnimation的设定
CABasicAnimation*scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
//transform.scale: x轴,y轴同时按比例缩放:
scaleAnimation.fromValue = [NSNumber numberWithFloat:1.0]; //从 from
scaleAnimation.toValue = [NSNumber numberWithFloat:1.5]; //to
scaleAnimation.autoreverses = YES;
scaleAnimation.fillMode = kCAFillModeBackwards;
scaleAnimation.repeatCount = 100; //重复次数 from到to
scaleAnimation.duration = 0.8; //一次时间
有了角色有了剧本,我们就可以开演了。
//开演
[scaleLayer addAnimation:scaleAnimation forKey:@"scaleAnimation"]; //key -- value.
至此,我们通过设定角色 ,设定剧本,开演的形式完成一个动画,其中剧本,我们可以设置成一组动画,例如:
CAAnimationGroup* groupAnnimation = [CAAnimationGroup animation];
groupAnnimation.duration = 2;
groupAnnimation.autoreverses = YES;
groupAnnimation.animations = @[animationOne,AnimationTwo];
//开演
[groupLayer addAnimation:groupAnnimation forKey:@"groupAnnimation"];
每天是旧的也是新的,开始。心灵鸡汤的东西,不要信,就像这篇文章,不要信,自己理解就好,努力就好。