首页 > 代码库 > 基本动画CABasicAnimation - 完成之后闪回初始状态
基本动画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 = http://www.mamicode.com/@100; 7 basicAnimation.byValue = http://www.mamicode.com/@50; 8 basicAnimation.toValue = http://www.mamicode.com/@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 - 完成之后闪回初始状态
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。