7

パスの周りをアニメートしているボールの画像があります。アニメーションは永久に繰り返されるように設定されていますが、繰り返しの間に遅延があるのはなぜですか?

これが私のコードです:

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);
4

3 に答える 3

11

これを試して:

[animation setCalculationMode:kCAAnimationPaced]
于 2013-02-18T13:39:02.087 に答える
1

実際の答えはわかりませんが、ここでは不要なことをたくさんしているので、それを削除することから始めることをお勧めします。CATransactionブロック(beginおよびcommit)は必要ありません。の必要はありませんsetBeginTime:。これはグループ化されたアニメーションではないため、removedOnCompletionとを設定する必要はありません。fillModeアニメーションをレイヤーに追加して、立ち止まるだけです。それはすぐに始まり、永遠に繰り返され、あなたのコードはよりシンプルでより良いものになります。

于 2013-02-01T18:47:03.767 に答える
0

または他の値kCAFillModeRemovedに置き換える必要があります。理由kCAFillModeForwardsに関するドキュメントをお読みください。

さらに:

交換:

[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]]

と(テスト結果に応じて):

[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]

また

[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]]
于 2013-02-01T18:46:16.513 に答える