• iOS-动画


    /**
     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. 将动画添加到图层
     
     =================================================================
     三. 动画组
     
     将基本动画和关键帧动画组合使用。
     
     以上的知识点,需要保证脑海中有一个大概的印象即可。在需要的时候,快速检索,查看.h文件或者笔记的方式,便能够完成动画代码的编写!
     
     =================================================================
     
     随着苹果块动画封装的越来越好,基本动画已经被块动画替代
     
     关键帧动画主要的应用场景:按照一定的路径运动!
     
     在实际的应用程序开发中,大多数只需要块动画就可以解决所有的问题,过于复杂的动画效果,会让界面变得凌乱不堪,反而影响用户体验。
     
     在应用开发中,目前还有一个动画效果比较常见的——摇晃动画,代码如下:
     */
    
    #pragma mark 摇晃动画
    - (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,从而达到流畅的动画效果。
     
     */
  • 相关阅读:
    博客圆终于注册完成了
    C# DES加密解密算法(让DES算法支持任意长度字符串作密钥)
    XNA开发思考之(1)tank的移动
    《Java基础知识》Java变量的声明、初始化和作用域
    《Java基础知识》Java 运算符
    《Java基础知识》Java常量的申明和使用
    《Java基础知识》Java字符串详解
    《Java基础知识》Java流程控制
    《Java基础知识》Java一维,二维数组的申明和使用
    删除数据库所有表的数据
  • 原文地址:https://www.cnblogs.com/DarbyCJ/p/3745573.html
Copyright © 2020-2023  润新知