我有一个这样的人:
CALayer *layer = stripeButton.layer;
CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"bounds.origin.y"];
moveAnim.duration = 3.35;
moveAnim.repeatCount = 0;
moveAnim.autoreverses = NO;
moveAnim.removedOnCompletion = NO;
moveAnim.calculationMode = kCAAnimationLinear;
moveAnim.fillMode = kCAFillModeForwards;
// ... keys and values here ...
[theLayer addAnimation:moveAnim forKey:@"theAnimation"];
你看这个动画是3.35秒。与此同时,可能会发生这样的情况,即在2秒内,对于不同的值,启动具有相同键@“theAnimation”的新动画。
问题发生了什么:新动画无法获取当前的可见状态。它从头开始很难。视图以丑陋的方式跳转到开始位置,然后从那里开始新动画。对于UIView,有一个setAnimationsBeginFromCurrentState = YES,但我没有找到类似CAKeyFrameAnimation的东西。有什么想法吗?
答案 0 :(得分:4)
您想要查询图层的表示层,这是当前的插值状态,包括当前正在运行的任何动画。
-
摘自CALayer类参考:
-(id)presentationLayer
返回包含所有属性的图层副本,与当前事务开始时一样,并应用任何活动动画。
-
CA编程指南中介绍了层树(您的数据),表示树(数据的当前插值)和渲染树的关系。