1

CAGradientLayerユーザーがそこに指をドラッグしたときにスケーリングしたいものがあります。ただし、フレームを設定すると、レイヤーは新しいサイズにアニメーション化されます。これは、start/endPointを含む他のプロパティでも発生します。

次に例を示します。

_gradient.frame = CGRectMake(0, 480-toHeight, 320, toHeight);

それでも、ユーザーが10ピクセル程度ドラッグしたときにのみこれを呼び出すと、レイヤーは単に新しいサイズにジャンプするのではなく、スムーズでありながらすばやく簡単なアニメーションでアニメーション化されます。私はこれがアニメーションブロックで呼び出されていないことを確信しています。さらにデバッグするためUIViewに、同じスコープ内のaのフレームもアニメートしますが、アニメートしません。

私は初めてなCALayersので、何か間違ったことをしているのかもしれません。

4

2 に答える 2

10

CALayerのほとんどのプロパティは、デフォルトでアニメーション化されています。これらの暗黙のアニメーションを無効にする必要があります。

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
// change layer's properties
_gradient.frame = newFrame;
[CATransaction commit];

CoreAnimationの学習に役立つサンプルを次に示します。

于 2011-10-22T11:15:22.100 に答える
3

Core Animationプログラミングガイドから:

「アニメーション化可能なレイヤープロパティの値を変更すると、レイヤーは古い値から新しい値への変更を暗黙的にアニメーション化します。」

したがって、アニメーションが必要ない場合は、iOSに明示的にアニメーション化しないように指示する必要があります。

[CATransaction begin];
[CATransaction setAnimationDuration:0.0];
_gradient.frame = CGRectMake(0, 480-toHeight, 320, toHeight);
[CATransaction commit];

幸運を!

于 2011-10-22T08:07:42.670 に答える