CABasicAnimation的使用方法(移动,旋转,缩放)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenyongkai1/article/details/75307674

设定动画CABasicAnimation的属性和说明

属性 说明
duration 动画的时间
repeatCount 重复的次数。不停重复设置为 HUGE_VALF
repeatDuration 设置动画的时间。
beginTime 指定动画开始的时间。从开始延迟几秒的话,设置为【CACurrentMediaTime() + 秒数】 的方式
timingFunction 设置动画的速度变化
autoreverses 动画结束时是否执行逆动画
fromValue 所改变属性的起始值
toValue 所改变属性的结束时的值
byValue 所改变属性相同起始值的改变量


动画结束后停在最后位置状态的解决方法

用CABasicAnimation执行动画,在动画结束后会回归动画开始前的状态。想要解决的话,必须设置“removedOnCompletion”和“fillMode”这两个属性

animation.removedOnCompletion = NO

animation.fillMode = kCAFillModeForwards; 


1.移动动画

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"]; 
animation.duration = 2;
animation.repeatCount = 2;

animation.beginTime =CACurrentMediaTime() + 1;// 1秒后执行

animation.fromValue = [NSValue valueWithCGPoint:myView.layer.position]; // 起始帧 

animation.toValue = [NSValue valueWithCGPoint:CGPointMake(300, 300)]; // 终了帧

// 视图添加动画 

[View.layer addAnimation:animation forKey:@"move-layer"]; 

2.旋转动画

// 对Y轴进行旋转(指定Z轴的话,就和UIView的动画一样绕中心旋转) 
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];

animation.duration = 2;

animation.repeatCount = 2;

animation.beginTime = CACurrentMediaTime() + 1// 1秒后执行

animation.fromValue = [NSNumber numberWithFloat:0.0]; // 起始角度

animation.toValue = [NSNumber numberWithFloat:M_PI]; // 终止角度 

[View.layer addAnimation:animation forKey:@"rotate-layer"];

3.缩放动画

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
animation.duration = 2.5// 动画持续时间 
animation.repeatCount = 1// 重复次数 
animation.fromValue = [NSNumber numberWithFloat:1.0]; // 开始时的倍率  
animation.toValue = [NSNumber numberWithFloat:2.0]; // 结束时的倍率 

[myView.layer addAnimation:animation forKey:@"scale-layer"]; 

4.渐隐动画

    //opacity layer的透明度

    CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];

    basicAnimation.fromValue = @(1.0);

    basicAnimation.toValue  = @(0.0);//[NSNumber numberWithFloat:0.0]

    basicAnimation.duration = 1.5;

    [self.myView.layer addAnimation:basicAnimation forKey:@"op"];


5.组合动画

CABasicAnimation *animation1 =[CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
animation1.toValue = [NSNumber numberWithFloat:80];; // 終点 
CABasicAnimation *animation1 =[CABasicAnimation animationWithKeyPath:@"transform.translation.z"];
animation2.fromValue = [NSNumber numberWithFloat:0.0]; // 开始时的角度
animation2.toValue = [NSNumber numberWithFloat:M_PI]; // 结束时的角度


/* 动画组 */ 
CAAnimationGroup *group = [CAAnimationGroup animation]; 
group.duration = 1.0;  
group.repeatCount = 1;

group.animations = [NSArray arrayWithObjects:animation1, animation2, nil nil];  
[myView.layer addAnimation:group forKey:@"move-rotate-layer"]; 

6.捕获动画开始时和终了时的事件

- (void)animationDidStart:(CAAnimation *)theAnimation {

 }

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {


 }


参考博客:http://blog.csdn.net/iosevanhuang/article/details/14488239

猜你喜欢

转载自blog.csdn.net/chenyongkai1/article/details/75307674