2011-10-22 13 views
1

私はユーザーが指をドラッグするので、私がスケールしたいCAGradientLayerを持っています。しかし、フレームを設定すると、レイヤーは新しいサイズにアニメートされます。これはstart/endPointを含む他のプロパティでも発生します。ここでCAGradientLayerがすべての変更をアニメーション化するのはなぜですか?

は例です:

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

ユーザーが10かそこらのピクセルをドラッグしたときに、私はこれだけを呼び出す場合、層は、単に新しいサイズにジャンプしない、それがスムーズにアニメーション化が、すばやく簡単アニメーション。私はこれがアニメーションブロックで呼び出されないということは肯定的です。さらにデバッグするために、UIViewのフレームを同じスコープでアニメーション化し、アニメーション化しません。

私はCALayersを新しくしています。多分私は間違ったやり方をしています。 Core Animationのプログラミングガイドから

+1

コードを投稿できますか? – mjisrawi

+0

あなたは.. \t '[UIView beginAnimations:nil context:NULL];の中にコードをラップしていますか?それは' commit'です..それを開いた後に 'commit'を忘れましたか?だから@mjisrawiは言う..いくつかのコードを投稿.. – rptwsthi

答えて

9

CALayerのプロパティのほとんどは、デフォルトでアニメーション化されています。 Core Animationのを学んであなたを助けるために

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

Here is a good sample:あなたはこれらの暗黙的なアニメーションを無効にする必要があります。

+0

すごい! Thx U、男! – HotJard

3

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

アニメーションをしたくないのであれば、あなたが明示的にアニメーション化しないのiOSを伝える必要があります:

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

幸運!

関連する問題