zoukankan      html  css  js  c++  java
  • 动画

    一、CALayer图层

    每一个视图都有一个根图层,负责视图的内容显示!图层的常用属性:  

    1. 设置圆角

    [myView.layer setCornerRadius:50];

    2. 边框

    [myView.layer setBorderColor:[UIColor whiteColor].CGColor];
    
    [myView.layer setBorderWidth:3.0f];

    3. 设置阴影

    提示:要设置阴影效果,必须同时指定颜色、透明度、偏移量

     [myView.layer setShadowColor:[UIColor blackColor].CGColor];
    
     [myView.layer setShadowOpacity:1.0f];
    
     [myView.layer setShadowOffset:CGSizeMake(10, 10)];

    提示:

    在UIImageView & UIButton中,如果需要指定图层的圆角,需要设置    [imageView.layer setMasksToBounds:YES];  

    设置的跟随属性之后,阴影设置将无效!

    关于图层的可动画属性,通常在开发中,只是为了让大家理解核心动画底层的实现机制,具体开发中,很少直接操作这些可动画属性。这些可动画属性,通常都是在基本动画或者关键帧动画中实现的。  

     二、动画

     属性动画 —— 通过修改图层的可动画属性实现的动画效果  

     1. 基本动画    

    属性:fromValue——动画起始     toValue—— 动画截止

     2. 关键帧动画    

    属性:values —— 动画过程中的数值     path——动画运动的路径(注意:指定了path之后,values失效)

    应用场景:按照一定的路径运动!

     使用步骤 :   

     1. 实例化动画CAKeyframeAnimation/CABasicAnimation  

     2. 设置动画属性(fromValue, toValue, values, path)  

     3. 设置动画时长 duration

     4. 如果需要监听动画完成,需要设置代理 delegate,同时在  - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag; 中编写动画完成后的相关代码!  

     5. 将动画添加到图层    

     动画组  

     将基本动画和关键帧动画组合使用。

       

    随着苹果块动画封装的越来越好,基本动画已经被块动画替代。

    在实际的应用程序开发中,大多数只需要块动画就可以解决所有的问题,过于复杂的动画效果,会让界面变得凌乱不堪,反而影响用户体验。

    在应用开发中,目前还有一个动画效果比较常见的——摇晃动画,代码如下:

    摇晃动画

    - (void)shake {   
    
        // 1. 动画  
       CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation"];     
    
        // 2. 设置角度  
       CGFloat angle = M_PI_4 / 10;      
       anim.values = @[@(-angle), @(angle), @(-angle)];  


    anim.duration
    = 0.2f;
    anim.repeatCount = HUGE_VALF;
    [self.layer addAnimation:anim forKey:nil]; }

      目前,再复杂的交互效果,通常会使用游戏框架开发,而不适用UIKit框架开发。因为UIKit的性能较差,开发大量图片的动画应用,通常性能非常糟糕!    关于游戏框架,苹果原生的框架是:SpriteKit  第三方游戏框架:Cocos2D(iOS/OC) & Cocos2D-X(跨平台/C++) 

    转场动画CATransition

    记住以下转场动画的关键字即可:fade 、push、moveIn、reveal、cube、oglFlip、suckEffect、rippleEffect 、pageCurl、pageUnCurl、cameraIrisHollowOpen、cameraIrisHollowClose    

    转场动画的使用步骤    

    1. 实例化转场动画CATransition  

    2. 设置类型  

    3. 如果有方向(上下左右),则需要设置子类型  

    4. 设置动画时长

    5. 将动画添加到图层  

     除了以上几种转场动画之外,还有两个块代码转场    

     单视图转场动画方法

     + (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;  

     双视图转场动画方法:

     + (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion;

      建议:一般在使用块代码转场时,尽量不要使用双视图转场,而使用单视图转场。单视图转场动画,只需要在动画块代码中,修改视图的内容即可。原因,在双视图转场中,

     1> fromView的superView会被删除,即将fromView从根视图中移除

     2> toView会被加入到根视图中

     

    时钟动画    CADisplayLink  

    实例化时钟:

     _timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateTimer)];

     将时钟添加到主运行循环,才能够在每次屏幕刷新时工作

     [_timer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];  

     相比较NSTimer而言,CADisplayLink的好处在于可以精确的在每一帧屏幕刷新时,更新界面UI,从而达到流畅的动画效果。

  • 相关阅读:
    phpexcel 字符串转码
    thinkphp 3.2 linux二级目录安装
    linux 系统、命令、软件
    thinkphp3.2和phpexcel导入
    苹果手机微信分享代码失效
    thinkphp3.2与phpexcel带图片生成 完美案例
    thinkphp3.2与phpexcel基础生成
    thinkphp 3.2加载类
    thinkphp 3.2与phpexcel
    thinkphp 导出exl功能
  • 原文地址:https://www.cnblogs.com/swcheng/p/3641000.html
Copyright © 2011-2022 走看看