3

ユーザーが何かを行うたびに、CALayer を数ポイント移動しようとしています。アニメーションを比較的ゆっくりと実行するように設定しましたが、アニメーションの設定後にレイヤーの位置を設定すると、暗黙のアニメーションが引き継ぎ、アニメーションをすばやく実行するように見えます。基本的に私のコードは次のようになります。

    CGPoint point = CGPointMake(layer.position.x + 30, layer.position.y + 30);
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
    animation.fromValue = [NSValue valueWithCGPoint: layer.position];
    animation.toValue = [NSValue valueWithCGPoint: point];
    animation.duration = 4;
    animation.removedOnCompletion = NO;
    animation.fillMode = kCAFillModeForwards;
    [layer addAnimation:animation forKey:@"position"];
    layer.position = point;

最初のアニメーションが期待どおりに実行されるようにする最後の行を削除しよlayer.position = pointうとしましたが、アニメーションをもう一度実行しようとすると、最初のアニメーションを実行する前のレイヤーの場所にレイヤーがジャンプして戻ります。現在、これを解決できる唯一の方法は、アニメーションにデリゲートを追加して、アニメーションanimationDidStopの完了後にレイヤーのポイントを実装および設定することです。しかし、他の多くの人のサンプル コードを見ると、これは必要ないはずです。私が間違っていることはありますか?

4

2 に答える 2

0

WWDC'11セッション 421 - Core Animation Essentials をご覧ください。45:21 に、あなたのような例があります。

最初にレイヤーに新しい値を設定し、アニメーションを作成してからレイヤーに追加します。注意しなければならないことの 1 つは、fillModeプロパティkCAFillModeBackwardsです。

于 2014-07-07T14:13:17.383 に答える