2012-03-05 2 views
0

私はUIViewといくつかのレイヤーを作成しました。私はそれらのレイヤーをUIViewのレイヤーのルートでsuperview-subview階層に編成し、いくつかのジェスチャー認識機能を追加しました。ジェスチャー認識機能からイベントのレイヤージオメトリを操作しようとしています。暗黙的なアニメーションやCATransactionsを使用します。明示的なアニメーションは使用されません。CoreAnimationがジャークを取得する

期間が0のCATransactionを作成すると実際の結果は十分ですが、期間を0.2に設定すると、奇妙な結果が得られます。イベントが急激でなく、前回のトランザクションで次の開始前に完了する時間があるすべてがOKです(例:タッピング)が、ピンチやパンなどの時間が足りない場合は、サイズ変更されているレイヤーがジャークを開始します。視覚的には、アニメーションが最初の点にロールバックし、新しい値に再び始まるように見えます。

これは何も表示されません。私は-[UIView layoutSubviews]でレイアウトを実行しようとしましたが、ジェスチャー認識ハンドラでsetNeedsDisplayを呼び出しました。私はまた、このロジックを別々のメソッドに分離しようとしましたが、それは助けになりません。

もう一度繰り返しますが、暗黙のアニメーションのみを使用します。そして私が知りたいのは、それがなぜ起こるのかです(しかし、回避する方法ではありません)。

手がかりはありますか?

+0

を実装する必要があります... –

答えて

1

前回終了していないときに新しいアニメーションを開始したと思います。動作しませんでした たぶん、私はこの質問が非常に悪い言葉遣いていると思いますが

[yourView.layer removeAnimationForKey:@"yourAnimationKey"]; 

のようにそれを停止する必要があり、アニメーションデリゲートメソッド

-(void)stopAnimation:(id)sender 
{ 
    yourView.frame = [[yourView.layer presentationLayer] frame]; // that set frame of your view to it's animation position 
} 
+0

。アニメーションは削除しないでください。プレゼンテーションレイヤーの現在の値から新しい値にアニメートする必要があります。それは私の合成テストでそうしています。 –

関連する問題