ios动画中抖动动画效果的实现与CALayer动画的基本理解

           今天漫谈一下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];
            
                //开演

                [groupLayer addAnimation:groupAnnimation forKey:@"groupAnnimation"];

每天是旧的也是新的,开始。心灵鸡汤的东西,不要信,就像这篇文章,不要信,自己理解就好,努力就好。


        
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值