ユーザーが何かを行うたびに、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
の完了後にレイヤーのポイントを実装および設定することです。しかし、他の多くの人のサンプル コードを見ると、これは必要ないはずです。私が間違っていることはありますか?