将动画组合在单一属性上

时间:2009-02-16 20:53:56

标签: iphone cocoa cocoa-touch core-animation

如何使用两个单独的CABasicAnimations同时为同一属性设置动画?

例如两个CABasicAnimations,都是animate position.y。

第一个动画将是一个反弹(从100到300,持续时间= 1,autoreverse = yes,repeatcount = 10)

第二个动画将是慢速滚动(按100,持续时间= 10)

我看到的行为是,如果第一个动画正在进行中&我用:

[pickle.layer addAnimation:[self makescrollanimation] forKey:@"scrollit"];

添加第二个......忽略第二个。

我知道第二个动画是有效的,因为如果我从第二个动画开始,那么第一个动画将被忽略。

谢谢 - 马特

3 个答案:

答案 0 :(得分:5)

如果我理解正确,您希望视图在整个弹跳动作缓慢向下移动时上下跳动。您可以通过使用其添加属性制作动画添加剂来实现此目的。例如:

CABasicAnimation *bounceAnimation = [CABasicAnimation animationWithKeyPath:@"position.y"];
bounceAnimation.duration = 1;
bounceAnimation.fromValue = [NSNumber numberWithInt:100];
bounceAnimation.toValue = [NSNumber numberWithInt:300];
bounceAnimation.repeatCount = 10;
bounceAnimation.autoreverses = YES;
bounceAnimation.fillMode = kCAFillModeForwards;
bounceAnimation.removedOnCompletion = NO;
bounceAnimation.additive = YES;
[view.layer addAnimation:bounceAnimation forKey:@"bounceAnimation"];

CABasicAnimation *scrollAnimation = [CABasicAnimation animationWithKeyPath:@"position.y"];
scrollAnimation.duration = 10;
scrollAnimation.fromValue = [NSNumber numberWithInt:0];
scrollAnimation.toValue = [NSNumber numberWithInt:100];
scrollAnimation.fillMode = kCAFillModeForwards;
scrollAnimation.removedOnCompletion = NO;
scrollAnimation.additive = YES;
[view.layer addAnimation:scrollAnimation forKey:@"scrollAnimation"];
如果我正确地阅读你的问题,

应该完成你想要的动画。应该能够在反弹动画期间的任何时刻触发滚动动画。

答案 1 :(得分:1)

我写了一篇关于如何使用添加动画的quick summary

简而言之,在事务中设置新模型值,然后从旧模型值减去新模型值进行动画处理,目标是NSZeroPoint,NSZeroRect或标识变换。你可以通过改变动画中的动画获得漂亮的曲线,而不是摇晃。

答案 2 :(得分:0)

如果要跨多个属性捆绑多个动画,可以使用CAAnimationGroup,但我不确定使用两个CABasicAnimations是否可行。您每次只能将一个属性动画应用于视图。

我能想到实现这一目标的一种方法是将视图嵌套在另一个UIView中,并在封闭视图上执行'scrollit'动画,同时继续反弹所包含的视图。

喜欢知道更好的答案!