如何让CAKeyframeAnimation在覆盖另一个时获取当前状态?

时间:2009-08-23 11:50:56

标签: iphone core-animation cakeyframeanimation

我有一个这样的人:

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的东西。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您想要查询图层的表示层,这是当前的插值状态,包括当前正在运行的任何动画。

-

摘自CALayer类参考:

 -(id)presentationLayer

返回包含所有属性的图层副本,与当前事务开始时一样,并应用任何活动动画。

-

CA编程指南中介绍了层树(您的数据),表示树(数据的当前插值)和渲染树的关系。

Core Animation Rendering Architecture