zoukankan      html  css  js  c++  java
  • 核心动画01-CABasicAnimation

    - (void)viewDidLoad {//创建layer对象
        [super viewDidLoad];
        
        CALayer *layer = [CALayer layer];
        
        layer.position = CGPointMake(100, 100);
        layer.bounds = CGRectMake(0, 0, 100, 100);
        layer.backgroundColor = [UIColor redColor].CGColor;
        [self.view.layer addSublayer:layer];
        self.layer = layer;
    }

    CABasicAnimation,基本动画,只能从fromValue改变到toValue,只能在两个值之间切换

    一: 平移动画

    - (void)testTranslate
    {
        /**平移方法一:position**/
        //1、创建动画对象
        CABasicAnimation *anim = [CABasicAnimation animation];
        
        //2、设置动画对象
        //让图层动起来的本质是改变图层的某些属性
        //keyPath决定了执行怎样的动画,通过KVC的方式来执行动画的,keyPath告诉它调整哪个属性来执行动画,这个属性不可以乱写,要图层有这个属性才可以
        
        anim.keyPath = @"position";
        //    anim.fromValue = //没有设置的话,默认从当前位置开始
        //toValue:最终变成什么值
        //byValue:增加多少值
        anim.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 300)];
    //    anim.byValue = [NSValue valueWithCGPoint:CGPointMake(200, 300)];
        anim.duration = 2.0;
        
        //核心动画有一个缺点:会反弹,回到动画开始的初始位置
        /**让图层保存动画执行完毕后的状态**/
        //开发中直接拷贝,不需要记
        //两个属性可以取消核心动画的反弹效果
        //属性1:动画执行完毕之后不要删除动画
        anim.removedOnCompletion = NO; //当完成动画的时候,是否移除动画,默认是YES,表示移除
        //属性2:保存最新的状态
        anim.fillMode = kCAFillModeForwards; //以kCAFillMode开头,动画执行完的保存模式,Forwards表示前进,保持动画最新的状态
        
        
        //3、添加动画
        [self.layer addAnimation:anim forKey:nil];
        
        /**平移方法二:anchorPoint,改变锚点**/
    //    anim.keyPath = @"anchorPoint";
    //    anim.toValue = [NSValue valueWithCGPoint:CGPointMake(1, 1)];
        
        /**平移方法三:**/
    //    anim.keyPath = @"transform.translation";
    //    anim.toValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
    }

    二:缩放

    #pragma make 缩放
    - (void)testScale
    {
        //1、创建动画对象
        CABasicAnimation *anim = [CABasicAnimation animation];
        
        //2、设置动画对象
        //keyPath决定了执行怎样的动画
        
        anim.keyPath = @"bounds";
        //    anim.fromValue = //没有设置的话,默认从当前位置开始
        anim.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)];
        anim.duration = 2.0;
        
        /**让图层保存动画执行完毕后的状态**/
        anim.removedOnCompletion = NO;
        anim.fillMode = kCAFillModeForwards;
        
        //3、添加动画
        [self.layer addAnimation:anim forKey:nil];
    }

    三、TransForm三维旋转

    - (void)testRotation3D
    {
        //1、创建动画对象
        CABasicAnimation *anim = [CABasicAnimation animation];
        
        //2、设置动画对象
        //keyPath决定了执行怎样的动画
        
        anim.keyPath = @"transform";
        //    anim.fromValue = //没有设置的话,默认从当前位置开始
        anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 1, 0)];//包装什么类型可以敲一下layer的这个属性是什么类型的
        anim.duration = 2.0;
        
        /**让图层保存动画执行完毕后的状态**/
        anim.removedOnCompletion = NO;
        anim.fillMode = kCAFillModeForwards;
        
        //3、添加动画
        [self.layer addAnimation:anim forKey:nil];
    }

    四、TransForm二维旋转

    - (void)testRotation2D
    {
        //1、创建动画对象
        CABasicAnimation *anim = [CABasicAnimation animation];
        
        //2、设置动画对象
        //keyPath决定了执行怎样的动画
        
        anim.keyPath = @"transform.rotation";
        
        //    anim.fromValue = //没有设置的话,默认从当前位置开始
        //查一下官方文档就知道传人什么值了,输入CATransform keyPath就可以了
        anim.toValue = @(M_PI);//包装什么类型可以敲一下layer的这个属性是什么类型的
        
    //    //transform属性缩放,可以查文档看transform后面的属性
    //    anim.keyPath = @"transform.scale";
    //    anim.toValue = @(1.5);//不指定宽高的话表示,宽高一起缩放1.5倍
        
        
        anim.duration = 2.0;
        
        /**让图层保存动画执行完毕后的状态**/
        anim.removedOnCompletion = NO;
        anim.fillMode = kCAFillModeForwards;
        
        //3、添加动画
        [self.layer addAnimation:anim forKey:nil];
            
    }
  • 相关阅读:
    npm使用淘宝镜像源
    MapReduce任务执行源码分析
    spark.sql.shuffle.partitions到底影响什么
    hdfs的写入数据流程及异常情况分析
    面试题
    HDFS的双缓冲机制详解
    rpm包无法卸载
    hive建表支持的文件类型与压缩格式
    centos6中同时安装python3.7与python2.6
    linux centos6.x安装mysql5.6.33版本
  • 原文地址:https://www.cnblogs.com/yipingios/p/4504752.html
Copyright © 2011-2022 走看看