核心动画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];
        
}

 

posted on 2015-05-14 23:02  快乐加油站789  阅读(205)  评论(0编辑  收藏  举报

导航