基本动画CABasicAnimation - 完成之后闪回初始状态

Posted 小课桌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基本动画CABasicAnimation - 完成之后闪回初始状态相关的知识,希望对你有一定的参考价值。

基本动画CABasicAnimation 结束之后,默认闪回初始状态,那怎么解决呢?

 

position需要设备两个属性:

1     // MARK: - 结束后不要闪回去
2     anim.removedOnCompletion = NO;
3     anim.fillMode = kCAFillModeForwards;

设置之后,不会再闪回去,但其实控件的位置并未改变,还在原来的位置,只是“显示层”挪到了新位置。

可以通过动画的代理方法来实现:

    // MARK: - 通过代理方法,修正按钮的位置!
    // 这个代理写在了NSObject的分类中,不需要尊守任何协议
    anim.delegate = self;

实现代理方法:

 1 #pragma mark - 核心动画的代理方法
 2 // 核心动画开始
 3 - (void)animationDidStart:(CAAnimation *)anim {
 4 
 5     NSLog(@"核心动画开始");
 6     
 7 }
 8 
 9 // 核心动画结束
10 - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
11     
12 //    NSLog(@"核心动画结束!");
13     // 在核心动画结束后,将控件的真实位置挪过来!
14     _btn.center = CGPointMake(150, 500);
15     
16     // 将layer中的动画移除掉,保证不会闪了!
17     [_btn.layer removeAllAnimations];
18 }

 

如果是transform.scale,transform.rotation,只需要设置anim.removedOnCompletion = NO;即可

 

 

常见属性:

 1 CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"position.y"];
 2 
 3     basicAnimation.duration = 2;
 4     
 5     // 这三个属性同时最多只能设置2个
 6     basicAnimation.fromValue = @100;
 7     basicAnimation.byValue = @50;
 8     basicAnimation.toValue = @500;
 9     
10     basicAnimation.repeatCount = CGFLOAT_MAX;
11     
12     basicAnimation.removedOnCompletion = NO;
13     basicAnimation.fillMode = kCAFillModeForwards;
14     
15     [_btn.layer addAnimation:basicAnimation forKey:nil];

 

以上是关于基本动画CABasicAnimation - 完成之后闪回初始状态的主要内容,如果未能解决你的问题,请参考以下文章

CABasicAnimation 在动画完成后重置为初始值

CABasicAnimation的基本使用方法(移动·旋转·放大·缩小)

UICollectionViewCells 中的 CABasicAnimation 在屏幕外完成

Swift - CABasicAnimation 完成时更新 UIButton

CABasicAnimation 代替 UIView 动画

在 CABasicAnimation 中闪烁以进行旋转