2011-01-14 1 views
7

アニメーション化する目的でビューに50個の画像を追加したいとしましょう。 「UIView」アニメーションではなく、Core Animation(CABasicAnimationなど)を使用することを計画しているとします。iOS:アニメーション用のUIViewまたはCALayersを追加する必要がありますか?

私は50のサブビューまたは50のサブレイヤを追加することでこれを実装する方が良いですか?違いはありますか?

ありがとうございました。

答えて

16

私がhereと記述しているように、私はアニメーションでUIViewとCALayersの両方を使用しており、それらのパフォーマンスの差はごくわずかです。 UIViewsは、レイヤーを囲む非常に軽量のラッパーです。また、必要なレイヤーベースのアニメーションをUIViewのバッキングレイヤーに簡単に適用できます。

クロスプラットフォーム(Mac/iOS)のUI要素を作成したいという状況で、CALayersを直接使用しました.CALayersは、大幅に異なるNSViewやUIViewとは異なり、両方のプラットフォームでの実装がほとんど同じです。 CALayersにはすぐに使用できるタッチ処理ルーチンはありませんが、必要に応じてその機能を追加できます。

(CoverFlowエフェクトのように)レイヤーの3-D操作を制限しようとする場合や、CAReplicatorLayerを使用してパーティクルエフェクトを生成する場合など、レイヤーを直接操作したい場合もあります。

+0

主に、UIViewを使用してアニメーションを実行したり、アクションを連続して実行することが重要な場合に、ブロックを含むUIViewアニメーションを実装するのが非常に簡単になるため、UIViewを使用することになりました。 (これらのコンプリートブロックは非常にきれいで、デリゲートの 'animationDidStop'コールは私の特別なケースで実装する悪夢になるだろう)。 –

+1

@Greg - 新しいブロックベースのUIViewアニメーションはきれいです。しかし、CATransactionの '+ setCompletionBlock:'を使用してCAAnimationsで同様のブロック補完コールバックを得ることができます。これは、そのトランザクション内にラップされたすべてのアニメーションの完了時にブロックを実行します。あなたがそのようにしたいと思うかもしれないかどうかについて考えてみてください。 –

1

UIViewにはサブレイヤが含まれているため、重さが重く、イベントやタッチハンドラや変数など、50枚の画像すべてに必要のないものが含まれています。したがって、レイヤーを使用する方が、画像ごとにビューを使用するよりも多少効率が良く、メモリを少し使用することになります。

1

このような少数の画像の違いはごくわずかです。最も便利なものを使用してください。

+0

私は、iPhone 4で吃音を起こす前に、アニメーションできる画像が約50枚あることを発見しました(この数字は、画像のコンテンツ/サイズ、下の半透明レイヤの数アニメーション画像など) –

+0

電話機モデル:D – BallpointBen

0

私はアニメーション(まだ:-)を行っていませんが、私が読んで覚えているものは、50枚すべてを1枚作成し、描画するときに正しい画像にオフセットすることを示唆しています。そうすることで、1つのレイヤーやUIImageなどを表示するだけで済みます。スピードについては分かりませんが、メモリを節約し、管理やコード作成がより簡単になるだろうと思います。

+0

これは一般に「スプライト」と呼ばれ、OpenGLアニメーションに適用されますが、実際にCoreAnimationには適用されません。 –

関連する問題