アニメーション
アニメーションは、iOS と OS X 両方でユーザインタフェースを提示するための技術の不可欠な部分です。それはまた、これらのプラットフォームでユーザーエクスペリエンスの不可欠な一部とみなされます。簡単に言えば、アニメーションは、前の一つとは若干異なる画像を急速な順序で表示して起こす運動や変換の錯覚です。アニメーションは、ユーザーエクスペリエンスを向上させますが、それは単なる「目の保養 」とは全く違います。アニメーションは、ユーザーインターフェイスに何が起こっているかと言う事を、ユーザーへのフィードバックやコンテキストとして与えます。例えば iPhone の生産性アプリケーションでは、ユーザーがテーブルビューの行をタッチした場合、そのビューは通常、左へとスライドして見えなくなり、その場所へと右サイドから新しいビュースライドがやって来ます;これらのアニメーションは、視覚的に項目間の接続を強化表示し、それについての詳細なプレゼンテーションを強調します。 iOSとOS X はあなたが見るのアニメーションの多くを自動的にサポートしますが、アプリのユーザインターフェイスの他の部分のためのアニメーションを作成することができます。
Core Animation はユーザーインターフェイス内でアニメーションに力を与える
どちらのプラットフォームでもアニメーション機能の主なソースは、Core Animation です。 Core Animation は 高速で、2D レイヤーエンジンはそれにアクセスするための Objective-C インタフェースを持ちます。アニメーションが設定された後の Core Animation では、そのアニメーションの実行は完全に自動化されています。あなたはループやタイマーをインストールする必要はなく、あなたはフレームごとに描画する必要はありませんし、あなたのアニメーションの現在の状態を追跡する必要はありません。
Core Animation のキーテクノロジーはレイヤーです。レイヤーは、ビューに似ていますが、実際にはビューに割り当てられたモデルオブジェクトの軽量オブジェクト(CALayer の)です。それらは、ジオメトリ、タイミング、およびそれらの要素に基づくコンテンツを表示するビューのためのビジュアルプロパティをカプセル化します。あなたがしなければならない事は、アニメーションのプロパティを設定し、レイヤコンテンツを設定し、Core Animation に、それらの一部をさせる事です。
アニメーションはターゲット、タイプ、タイミングの詳細を持っている必要あり
すべてをアニメーション化するためには、ターゲットオブジェクトを指定する必要があります:(例えば、そのフレームのように)アニメーション化できるかどうか可視オブジェクトがプロパティを持っているかどうか、です。ターゲットを移動、サイズ変更、またはそれを拡張するか、あるいはフェードイン・フェードアウトするかどうかも、アニメーション実行のためにどのタイプのものかを指定する必要があります。最後に、すべてのアニメーションは、それが繰り返されるかどうか、アニメーションの再生時間を含むいくつかの要因及び、タイミング情報を、必要とし、そのペーシング、つまりそれが遅くなったり、アニメーションの先頭または末尾のいずれかでスピードアップするかどうか、などです。
暗黙の・対明示的な・アニメーション
iOS の、また OS X のすべてのビューはビューの合成およびアニメーションの動作を最適化する Layer オブジェクトに裏打ちされています(またはされている可能性があります)。ビューのフレーム、色、不透明度などのビューのいくつかの層に裏打ちされたプロパティは、アニメーションが本質的にできます。それらの値を変更すると、Core Animation は古い値から新しい値への移行をアニメーション化します。これらの暗黙的なアニメーションを使用すると、UIKit フレームや AppKit フレームワークへの最小限の指示を与えるだけでできますが、フレームワークはこれらの命令を受け取った後、自動的にアニメーションを実行します。
ビューのプロパティをアニメーション化することができない場合でも、まだ明示的にこれらのプロパティを使用してビューをアニメーション化することができます。明示的なアニメーションでは、より積極的に、Core Animation の機能を使用してアニメーションやレンダリングのコンテンツを管理する必要があります。
プラットフォームはビューと Core Animation を違うように統合
Core Animation は、UIKit フレームワークの UIView クラスと AppKit フレームワークの NSView クラスと統合されていますが、その統合の性質は異なります。主な違いは、AppKit では、Core Animation の機能をあなたが要求することを前提とし、一方、UIKit の方は、レンダリングするビューの中心部の実装にコアアニメーションを統合していることです。
UIKit では、各ビュー(UIView オブジェクト)はビューの初期化時に UIView クラスが自動的に作成され CALaye オブジェクトによって支えられています。層は非常に密接にビューと対になっているので、UIView クラスのメソッドとプロパティを介してコアアニメーションをアクセスすることができます。直接ビューのLayer プロパティを使用して Layer オブジェクトにアクセスできますが、ビューを作成した後は、レイヤを変更することはできません。
AppKit では、NSView のクラスはあなたの部分の明示的なアクションを必要とし、どちらも2つの方法で、コアアニメーションとレイヤに統合されています。
- Layer に裏打ちされたビュー:はその裏打ちされた倉庫としての Core Animation レイヤを使うビューです。この場合、YES の引数を指定してビューへのメッセージとしてアプリケーションは setWantsLayer : を送信する必要があります。
- Layer ホスティング。このアプローチでは、アプリケーションは、ビュー階層やその階層の一部のビューを反映しての Core Animation レイヤツリーを設定します。アプリケーションは、レイヤコンテンツと対話するために直接レイヤーを操作しなければなりません。ビューのルートレイヤオブジェクトを明示的に設定する(setLayer:)に続いて setWantsLayer: の呼び出しを要求することで、レイヤホストされているビューを要求します。
AppKit フレームワークは、直接レイヤーオブジェクトを操作する必要がなくなり、使いやすいアニメーションサポートを提供する アニメーションのプロキシ もサポートしています。また、一般化されたアニメーションのサポートのために、複数のアニメーションをリンクし、複数のウィンドウとビューをアニメーション化するための機能のため NSAnimation クラスとそのサブクラスの NSViewAnimation も提供しています。
前提条件の記事
関連記事
明確なディスカッション
Core Animation プログラミングガイド
サンプルコードプロジェクト
ビューの推移