Apple Developer Connection
Member Login Log In | Not a Member? Contact ADC

< 前ページ次ページ > 目次を隠す

Core Animationとは?

Core Animationは、グラフィック描画、投影、アニメーション化のためのObjective-Cクラスのコレクションです。Core Animationは、Application Kitビューアーキテクチャの知識のある開発者には慣れ親しまれている階層レイヤの抽象化を維持しながら、Core Imageベースの高度な視覚効果を用いた流体アニメーションを可能にします。

ダイナミックな、アニメーション化されたユーザインターフェイスは作成が困難ですが、Core Animationの次の機能により、このようなインターフェイスの作成が容易になります。

Core Animationを使用すると、開発者は自身のアプリケーション用に動的なFront Rowスタイルのユーザインターフェイスを作成でき、最適なアニメーションパフォーマンスを得るためにOpenGLなどの低レベルのグラフィックスAPIを使う必要がありません。

Core Animationは、Core Image、Core Video、Quartz Composer、QuickTime、およびQuartzウインドウサーバと統合されているため、これらのテクノロジーを併用することで、さまざまな視覚効果を得ることができます。Core Animationは、これらの個々のグラフィックスモデルに対する統一的なイメージングモデルを提供します。

Core Animationクラス

Core Animationクラスは、次の複数のカテゴリに分けられます。

基本的なCore AnimationクラスはQuartz Coreフレームワークに含まれていますが、追加のレイヤクラスは他のフレームワークで定義できます。「Core Animationのクラス階層」に、Core Animationのクラス階層を示します。


図 1  Core Animationのクラス階層

Core Animation class hierarchy

レイヤクラス

レイヤクラスはCore Animationの基礎であり、NSViewを使ったことのある開発者には親しみやすい抽象化を提供します。基本的なレイヤ機能は、すべてのタイプのCore Animationレイヤの親クラスであるCALayerクラスによって提供されます。

NSViewのインスタンスの場合と同様、CALayerには1つの親レイヤ(スーパーレイヤ)とサブレイヤのコレクションがあり、レイヤツリーと呼ばれるレイヤの階層を作っています。レイヤはビューと同様に背面から前面へ描画され、ローカル座標系を作成することによりスーパーレイヤを基準とした相対的なジオメトリを指定します。しかし、レイヤでは、レイヤコンテンツの回転、傾斜、拡大縮小、投影が可能な変換行列を組み込むことにより、複雑な視覚表示ができます。レイヤジオメトリと変換で、レイヤジオメトリと変換について詳しく説明します。

CALayerは、コンテンツを表示するためにCALayerをサブクラス化する必要がないという点で、NSViewとは異なります。CALayerインスタンスによって表示されるコンテンツは、次のようにして提供できます。

レイヤコンテンツの指定では、レイヤにコンテンツを指定する際に利用できるテクニックについて説明します。視覚スタイルプロパティとそれらがレイヤのコンテンツに適用される順番については、レイヤスタイルプロパティで説明します。

CALayerクラス以外にも、Core Animationクラスコレクションは次のクラスを提供しており、これを使ってアプリケーションは各種のコンテンツを表示できます。

CALayerクラスは、キー値コーディングに準拠したコンテナクラス、すなわち、サブクラスを作成せずにキー値コーディングに準拠したメソッドを用いて属性値を格納できるクラスの概念を導入しています。CALayerはまた、非形式プロトコルであるNSKeyValueCodingを拡張して、デフォルトのキー値と追加の構造体型(CGPointCGSizeCGRectCGAffineTransformCATransform3D)の自動オブジェクトラッピングをサポートしており、キーパスによってこれらの構造体のフィールドの多くへアクセスできる手段を提供しています。

さらにCALayerは、レイヤに関連付けられたアニメーションとアクションの管理も行います。レイヤは、レイヤがレイヤツリーに挿入される場合と削除される場合、レイヤプロパティに変更が行われる場合、開発者による明示的な要請がある場合などにアクショントリガを受け取ります。これらのアクションにより、通常はアニメーションが発生します。詳細については、アニメーションおよびアクションを参照してください。

アニメーションおよびタイミングクラス

レイヤの視覚プロパティの多くは、暗黙的にアニメーション化可能です。単にアニメーション化可能プロパティの値を変更するだけで、レイヤは自動的に現在の値から新しい値へアニメーション化します。たとえば、レイヤの非表示プロパティをYESに設定すると、レイヤが徐々にフェードされるアニメーションがトリガされます。ほとんどのアニメーション化可能プロパティには、カスタマイズや交換が簡単なデフォルトのアニメーションが関連付けられています。アニメーション化可能プロパティとそのデフォルトのアニメーションの完全なリストは、アニメーション化可能プロパティに掲載されています。

アニメーション化可能プロパティは、明示的にもアニメーション化できます。プロパティを明示的にアニメーション化するには、Core Animationのアニメーションクラスの1つのインスタンスを作成し、必要な視覚効果を指定します。明示的なアニメーションでは、レイヤにおいてプロパティの値が変更されるのではなく、単に表示上でアニメーション化されるだけです。

Core Animationは、基本的なアニメーションとキーフレームアニメーションを使って、レイヤのコンテンツ全体、または選択した属性をアニメーション化できるアニメーションクラスを提供します。Core Animationのアニメーションクラスはすべて、抽象クラスのCAAnimationから派生しています。CAAnimationは、アニメーションの単純な再生時間、速度、繰り返し回数を指定するCAMediaTimingプロトコルを採用しています。CAAnimationはまた、CAActionプロトコルも採用しています。このプロトコルは、レイヤによってトリガされたアクションに応答して、アニメーションを開始する標準手段を提供します。

さらにこのアニメーションクラスは、アニメーションのペース配分を単純なベジエ曲線として記述する、タイミング関数も定義しています。たとえば、線形のタイミング関数は、アニメーションのペースがその再生時間全体に渡り均一になるように指定し、イーズインのタイミング関数は、アニメーションが再生時間の終わりに近づくにつれて速度を落とすように指定します。

Core Animationは、いくつかの追加の抽象および具象アニメーションクラスを提供しています。

これらのアニメーションクラスは、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




Did this document help you?
Yes: Tell us what works for you.

It’s good, but: Report typos, inaccuracies, and so forth.

It wasn’t helpful: Tell us what would have helped.
Get information on Apple products.
Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Copyright © 2007 Apple Inc.
All rights reserved. | Terms of use | Privacy Notice