我从那个状态,我CAAnimationGroup
两个旋转的动画,一个从零开始,另一种是重复和autoreverses:CAAnimationGroup的最大持续时间值(CFTimeInterval)是多少?
- (void)addWobbleAnimationToView:(UIView *)view amount:(float)amount speed:(float)speed
{
NSMutableArray *anims = [NSMutableArray array];
// initial wobble
CABasicAnimation *startWobble = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
startWobble.toValue = [NSNumber numberWithFloat:-amount];
startWobble.duration = speed/2.0;
startWobble.beginTime = 0;
startWobble.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[anims addObject:startWobble];
// rest of wobble
CABasicAnimation *wobbleAnim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
wobbleAnim.fromValue = [NSNumber numberWithFloat:-amount];
wobbleAnim.toValue = [NSNumber numberWithFloat:amount];
wobbleAnim.duration = speed;
wobbleAnim.beginTime = speed/2.0;
wobbleAnim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
wobbleAnim.autoreverses = YES;
wobbleAnim.repeatCount = INFINITY;
[anims addObject:wobbleAnim];
CAAnimationGroup *wobbleGroup = [CAAnimationGroup animation];
wobbleGroup.duration = DBL_MAX; // this stops it from working
wobbleGroup.animations = anims;
[view.layer addAnimation:wobbleGroup forKey:@"wobble"];
}
由于CFTimeInterval被定义为double,我尝试设置动画组的持续时间到,但会阻止动画组运行。但是,如果我将它设置为一个很大的数字,例如10000,它运行良好。在CAAnimationGroup
的持续时间内,我可以使用的最大数字是多少,以确保其尽可能接近无穷?
UPDATE:看来,如果我把一个非常大的值,例如DBL_MAX/4.0
则冻结了一秒钟,然后开始动画。如果我输入值DBL_MAX/20.0
,那么开始时的冻结就会小很多。看起来持续这么大的价值会导致它冻结。除了在持续时间内使用非常大的值以外,还有更好的方法吗?
你正在努力使这组动画的重复下去吗? – 2013-03-27 17:19:50
是的,但我只希望小组的第二部分能够永远重复。 – jowie 2013-03-27 17:22:39
你确定需要设置持续时间吗?如果让它未设置会发生什么? – 2013-03-27 17:25:11