Core Animationは、グラフィック描画、投影、アニメーション化のためのObjective-Cクラスのコレクションです。Core Animationは、Application Kitビューアーキテクチャの知識のある開発者には慣れ親しまれている階層レイヤの抽象化を維持しながら、Core Imageベースの高度な視覚効果を用いた流体アニメーションを可能にします。
ダイナミックな、アニメーション化されたユーザインターフェイスは作成が困難ですが、Core Animationの次の機能により、このようなインターフェイスの作成が容易になります。
シンプルで分かりやすいプログラミングモデルを使った高性能合成機能。
よく知られているNSViewに似た抽象化。これにより、レイヤオブジェクトの階層を使って複雑なユーザインターフェイスを作成できます。
軽量のデータ構造。何百ものレイヤを同時に表示し、アニメーション化できます。
アニメーションをアプリケーションの実行ループから独立して別々のスレッドで実行できる、抽象アニメーションインターフェイス。一度アニメーションが設定され開始されると、Core Animationがそれをフレームレートで実行する役割を果たします。
アプリケーションのパフォーマンスの向上。アプリケーションは、コンテンツが変更されたらそれを再描画する必要があるだけです。アプリケーションのやり取りは、サイズ変更とレイアウトサービスレイヤの提供に必要な最小限のものだけです。Core Animationはまた、アニメーションのフレームレートで実行するアプリケーションコードを排除します。
レイヤの位置とサイズを、兄弟レイヤの属性を基準に相対的に設定できるマネージャなど、柔軟性のあるレイアウトマネージャモデル。
Core Animationを使用すると、開発者は自身のアプリケーション用に動的なFront Rowスタイルのユーザインターフェイスを作成でき、最適なアニメーションパフォーマンスを得るためにOpenGLなどの低レベルのグラフィックスAPIを使う必要がありません。
Core Animationは、Core Image、Core Video、Quartz Composer、QuickTime、およびQuartzウインドウサーバと統合されているため、これらのテクノロジーを併用することで、さまざまな視覚効果を得ることができます。Core Animationは、これらの個々のグラフィックスモデルに対する統一的なイメージングモデルを提供します。
Core Animationクラスは、次の複数のカテゴリに分けられます。
表示用のコンテンツを提供するレイヤクラス
アニメーションおよびタイミングクラス
レイアウトおよび制約クラス
複数のレイヤの変更をアトミックな更新にまとめるトランザクションクラス
基本的なCore AnimationクラスはQuartz Coreフレームワークに含まれていますが、追加のレイヤクラスは他のフレームワークで定義できます。「Core Animationのクラス階層」に、Core Animationのクラス階層を示します。
レイヤクラスはCore Animationの基礎であり、NSViewを使ったことのある開発者には親しみやすい抽象化を提供します。基本的なレイヤ機能は、すべてのタイプのCore Animationレイヤの親クラスであるCALayerクラスによって提供されます。
NSViewのインスタンスの場合と同様、CALayerには1つの親レイヤ(スーパーレイヤ)とサブレイヤのコレクションがあり、レイヤツリーと呼ばれるレイヤの階層を作っています。レイヤはビューと同様に背面から前面へ描画され、ローカル座標系を作成することによりスーパーレイヤを基準とした相対的なジオメトリを指定します。しかし、レイヤでは、レイヤコンテンツの回転、傾斜、拡大縮小、投影が可能な変換行列を組み込むことにより、複雑な視覚表示ができます。レイヤジオメトリと変換で、レイヤジオメトリと変換について詳しく説明します。
CALayerは、コンテンツを表示するためにCALayerをサブクラス化する必要がないという点で、NSViewとは異なります。CALayerインスタンスによって表示されるコンテンツは、次のようにして提供できます。
レイヤのコンテンツプロパティを直接、または委任を通じてCore Graphics Imageの表現に設定する。
Core Graphicsイメージコンテキストに直接描画するデリゲート(委任)を指定する。
すべてのレイヤタイプが共通で持っている任意の数の視覚スタイルプロパティ(背景色、ボーダー、影、不透明度、Core Imageフィルタ)を設定する。
CALayerをサブクラス化して、よりカプセル化された方法で上記の手法を実装する。
レイヤコンテンツの指定では、レイヤにコンテンツを指定する際に利用できるテクニックについて説明します。視覚スタイルプロパティとそれらがレイヤのコンテンツに適用される順番については、レイヤスタイルプロパティで説明します。
CALayerクラス以外にも、Core Animationクラスコレクションは次のクラスを提供しており、これを使ってアプリケーションは各種のコンテンツを表示できます。
CATextLayerは、文字列または属性文字列からレイヤコンテンツを作成する簡易クラスです。
CAOpenGLLayerは、OpenGL描画環境を提供します。OpenGLを使ったコンテンツを提供するには、このクラスをサブクラス化する必要があります。コンテンツは固定的なものや、時間の経過に伴って更新されるものが可能です。
CAScrollLayerクラスはCALayerのサブクラスであり、レイヤの部分的な表示を簡素化します。CAScrollLayerオブジェクトのスクロール可能領域の範囲は、そのサブレイヤのレイアウトによって定義されます。CAScrollLayerにはキーボードまたはマウスイベント処理や、表示可能なスクローラは提供されていません。
CATiledLayerでは、大きく複雑なイメージを段階的に表示することができます。
QCCompositionLayer(Quartz Composerフレームワークによって提供される)は、Quartz Composerコンポジションをそのコンテンツとしてアニメーション化します。
QTMovieLayerとQTCaptureLayer(QuickTimeフレームワークによって提供される)は、QuickTimeムービーとライブビデオの再生を可能にします。
CALayerクラスは、キー値コーディングに準拠したコンテナクラス、すなわち、サブクラスを作成せずにキー値コーディングに準拠したメソッドを用いて属性値を格納できるクラスの概念を導入しています。CALayerはまた、非形式プロトコルであるNSKeyValueCodingを拡張して、デフォルトのキー値と追加の構造体型(CGPoint、CGSize、CGRect、CGAffineTransform、CATransform3D)の自動オブジェクトラッピングをサポートしており、キーパスによってこれらの構造体のフィールドの多くへアクセスできる手段を提供しています。
さらにCALayerは、レイヤに関連付けられたアニメーションとアクションの管理も行います。レイヤは、レイヤがレイヤツリーに挿入される場合と削除される場合、レイヤプロパティに変更が行われる場合、開発者による明示的な要請がある場合などにアクショントリガを受け取ります。これらのアクションにより、通常はアニメーションが発生します。詳細については、アニメーションおよびアクションを参照してください。
レイヤの視覚プロパティの多くは、暗黙的にアニメーション化可能です。単にアニメーション化可能プロパティの値を変更するだけで、レイヤは自動的に現在の値から新しい値へアニメーション化します。たとえば、レイヤの非表示プロパティをYESに設定すると、レイヤが徐々にフェードされるアニメーションがトリガされます。ほとんどのアニメーション化可能プロパティには、カスタマイズや交換が簡単なデフォルトのアニメーションが関連付けられています。アニメーション化可能プロパティとそのデフォルトのアニメーションの完全なリストは、アニメーション化可能プロパティに掲載されています。
アニメーション化可能プロパティは、明示的にもアニメーション化できます。プロパティを明示的にアニメーション化するには、Core Animationのアニメーションクラスの1つのインスタンスを作成し、必要な視覚効果を指定します。明示的なアニメーションでは、レイヤにおいてプロパティの値が変更されるのではなく、単に表示上でアニメーション化されるだけです。
Core Animationは、基本的なアニメーションとキーフレームアニメーションを使って、レイヤのコンテンツ全体、または選択した属性をアニメーション化できるアニメーションクラスを提供します。Core Animationのアニメーションクラスはすべて、抽象クラスのCAAnimationから派生しています。CAAnimationは、アニメーションの単純な再生時間、速度、繰り返し回数を指定するCAMediaTimingプロトコルを採用しています。CAAnimationはまた、CAActionプロトコルも採用しています。このプロトコルは、レイヤによってトリガされたアクションに応答して、アニメーションを開始する標準手段を提供します。
さらにこのアニメーションクラスは、アニメーションのペース配分を単純なベジエ曲線として記述する、タイミング関数も定義しています。たとえば、線形のタイミング関数は、アニメーションのペースがその再生時間全体に渡り均一になるように指定し、イーズインのタイミング関数は、アニメーションが再生時間の終わりに近づくにつれて速度を落とすように指定します。
Core Animationは、いくつかの追加の抽象および具象アニメーションクラスを提供しています。
CATransitionは、レイヤのコンテンツ全体に作用するトランジションエフェクトを提供します。これは、アニメーション化の際にレイヤコンテンツのフェード、プッシュ、リビールを行います。独自のカスタムCore Imageフィルタを指定することによって、手持ちのトランジションエフェクトを拡張できます。
CAAnimationを使うと、アニメーションオブジェクトの配列をグループ化して、同時に実行できます。
CAPropertyAnimationは、キーパスによって指定されたレイヤプロパティのアニメーション化を可能にする抽象サブクラスです。
CABasicAnimationは、レイヤプロパティに対して単純な補間を提供します。
CAKeyframeAnimationは、キーフレームアニメーションをサポートします。アニメーション化するレイヤプロパティのキーパスと、アニメーションの各ステージの値を表す値の配列、およびキーフレームの時間とタイミング関数の配列を指定します。アニメーションが実行するたびに、指定された補間を使って各値が設定されます。
これらのアニメーションクラスは、Core AnimationとCocoa Animationの代理として使われます。これらのクラスはCore Animationに関連するため、アニメーションで説明します。『Animation Types and Timing Programming Guide』ではこれらのクラスの機能を詳しく説明しています。
NSViewは、レイヤをそのスーパーレイヤを基準にして相対的に位置付ける、従来の「ストラット&スプリング」モデルを提供します。レイヤはこのモデルをサポートしていますが、Core Animationは、開発者が独自のレイアウトマネージャを記述できる、より柔軟性のあるレイアウトマネージャメカニズムも提供しています。
Core AnimationのCAConstraintクラスは、指定された一連の制約を使ってサブレイヤを整列させるレイアウトマネージャです。各制約(CAConstraintクラスのインスタンスによってカプセル化されます)は、あるレイヤの1つのジオメトリ属性(左端、右端、上端、下端、水平方向または垂直方向の中央)の関係を、その兄弟レイヤまたはスーパーレイヤのジオメトリ属性を基準にして相対的に表したものです。
レイアウトマネージャの概要と制約レイアウトマネージャについては、Core Animationレイヤの配置で説明します。
レイアウトのアニメーション化可能プロパティへの変更はすべて、トランザクションの一部でなければなりません。CATransactionは、複数のアニメーション操作を表示へのアトミックな更新として一括処理する役割を果たすCore Animationクラスです。トランザクションはネスト化できます。
Core Animationは2つのタイプのトランザクションをサポートします。すなわち、暗黙的なトランザクションと明示的なトランザクションです。暗黙的なトランザクションは、レイヤのアニメーション化可能プロパティがアクティブなトランザクションなしでスレッドによって変更されると自動的に作成され、スレッドの実行ループの次の反復時に自動的にコミットされます。明示的なトランザクションは、レイヤの変更前にアプリケーションがCATransactionクラスに開始メッセージを送信し、その後コミットメッセージを送信したときに発生します。
トランザクション管理については、トランザクションで説明します。
Last updated: 2007-12-06