CAKeyFrameAnimation在重复之前延迟

时间:2013-02-01 18:26:54

标签: ios animation delay geometry cakeyframeanimation

我有一个球形图像,我正在围绕一条路径制作动画。动画设置为永远重复,但为什么重复之间有延迟?

这是我的代码:

CGPathRef aPath;
aPath = CGPathCreateWithEllipseInRect(CGRectMake(0, 0, SIZE, SIZE), NULL);

[CATransaction begin];

arcAnimation = [CAKeyframeAnimation animationWithKeyPath: @"position"];
[arcAnimation setBeginTime:CACurrentMediaTime()];
[arcAnimation setDuration: 1.5];
[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[arcAnimation setAutoreverses: NO];
[arcAnimation setRepeatCount:HUGE_VALF];
arcAnimation.removedOnCompletion = NO;
arcAnimation.fillMode = kCAFillModeRemoved;
[arcAnimation setPath: aPath];
[ball.layer addAnimation: arcAnimation forKey: @"position"];
[CATransaction commit];
CFRelease(aPath);

3 个答案:

答案 0 :(得分:10)

试试这个:

[animation setCalculationMode:kCAAnimationPaced]

答案 1 :(得分:1)

我不知道实际答案,但你在这里做了很多不必要的事情,我的建议是你先从删除它开始。不需要CATransaction块(begincommit)。 setBeginTime:没有必要。绝对不需要设置removedOnCompletionfillMode,因为这不是分组动画。只需将动画添加到图层并退回即可。它将立即启动并将永远重复,您的代码将更简单,更好。

答案 2 :(得分:0)

您必须将kCAFillModeRemoved替换为kCAFillModeForwards或其他值。阅读文档on why

此外:

替换:

[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]]

使用(取决于您的测试结果):

[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]

[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]]