【发布时间】:2013-03-27 17:06:36
【问题描述】:
我的CAAnimationGroup 中有两个旋转动画,一个从零开始,另一个从该状态重复和自动反转:
- (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 被定义为双精度,我尝试将动画组的持续时间设置为 DBL_MAX,但这会阻止动画组运行。但是,如果我将其设置为较大的数字,例如 10000,则运行良好。在CAAnimationGroup 的持续时间内,我可以使用的最大数字是多少,以确保它尽可能接近无穷大?
更新:似乎如果我输入一个非常大的值,例如DBL_MAX / 4.0,那么它会冻结一秒钟,然后开始动画。如果我输入值DBL_MAX / 20.0,那么一开始的冻结会小很多。似乎具有如此大的持续时间值导致它冻结。除了使用非常大的持续时间值之外,还有更好的方法吗?
【问题讨论】:
-
你是想让这组动画永远重复吗?
-
是的,但我只希望小组的第二部分永远重复。
-
您确定需要设置持续时间吗?如果不设置会怎样?
-
如果我不设置它,动画根本不会运行。还有,我设置的方式,如果应用进入后台再重新打开,动画就停止了,这也是个问题。
-
嗯,
DBL_MAX表示大约 10^300 年。10000表示超过 2 小时。您希望您的应用在终止前运行多长时间?
标签: ios objective-c ipad core-animation caanimation