我有一个球形图像,我正在围绕一条路径制作动画。动画设置为永远重复,但为什么重复之间有延迟?
这是我的代码:
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);
答案 0 :(得分:10)
试试这个:
[animation setCalculationMode:kCAAnimationPaced]
答案 1 :(得分:1)
我不知道实际答案,但你在这里做了很多不必要的事情,我的建议是你先从删除它开始。不需要CATransaction块(begin
和commit
)。 setBeginTime:
没有必要。绝对不需要设置removedOnCompletion
和fillMode
,因为这不是分组动画。只需将动画添加到图层并退回即可。它将立即启动并将永远重复,您的代码将更简单,更好。
答案 2 :(得分:0)
您必须将kCAFillModeRemoved
替换为kCAFillModeForwards
或其他值。阅读文档on why。
此外:
替换:
[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]]
使用(取决于您的测试结果):
[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]
或
[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]]