Core AnimationのレイヤとCocoaのビューには明白な共通点がいくつかありますが、概念上の大きな違いがあり、レイヤは画面に直接的には描画しません。
NSViewがModel-View-Controllerデザインパターンにおいて明白なビューオブジェクトであるのに対し、Core Animationレイヤは実際にはモデルオブジェクトです。Core Animationレイヤは、ジオメトリ、タイミング、および視覚プロパティをカプセル化し、表示するコンテンツを提供しますが、実際の表示はレイヤの役割ではありません。
可視のレイヤツリーはそれぞれ対応する2つのツリーによって支えられています。すなわち、図 1に示すプレゼンテーションツリーと描画ツリーです。
レイヤツリーには、各レイヤのオブジェクトモデルの値が含まれています。これらは、レイヤプロパティに値を代入するときに設定する値です。
プレゼンテーションツリーには、アニメーションを実行するたびに、ユーザに現在提示されている値が含まれます。たとえば、あるレイヤのbackgroundColorに新しい値を設定すると、レイヤツリーの値が即座に変わります。しかしプレゼンテーションツリーの対応するレイヤのbackgroundColor値は、ユーザに対して表示されるときに補間された色で更新されます。
描画ツリーは、レイヤを描画するときにはプレゼンテーションツリーの値を使用します。描画ツリーは、アプリケーションの動作とは独立して合成操作を実行します。つまり描画は別々のプロセスやスレッドで行われるため、アプリケーションの実行ループへの影響は最小限に抑えられます。
アニメーショントランザクションの処理中に、CALayerのインスタンスに、そのプレゼンテーションレイヤを問い合わせることができます。これは、現在のアニメーションを変更しようとしており、現在表示されている状態から新しいアニメーションを開始したい場合に非常に役立ちます。
Last updated: 2007-12-06