Core Animationでアニメーション処理の対象となるのはCALayerクラスです。 実はこのCALayer、iOSとOS Xではシステムへの実装形態が異なります。UIKitのUIViewオブジェクトにはデフォルトでCALayerオブジェクトがありますが、AppKitのNSViewオブジェクトではnibファイルで指定しない限り、後から追加することになります。本書籍では、Core Animationを使うサンプルソースコードを幾つか紹介し、OS X環境との相違点などにも着目しながら、iOSにおけるCore Animationフレームワーク活用の習得を目指したいと思います。
著者:有限会社オッティモ 小池邦人
書籍はePubドキュメントです。本文については、iPad版 iBooksのテーマが「フルスクリーン」、フォント種類が「ヒラギノ明朝」、フォントサイズが「下から3番目」に合わせてレイアウトされています。その設定に変更してからiPadを縦向きにしてお読みください。Mac版 iBooksで読まれる場合には、表示を「単一ページ」に設定してください。
一度登録してしまえば、本文中に設定されているハイパーリンク経由でアプリの指定したデモを起動することが可能です。アプリを起動するハイパーリンクは先頭に「★」が付いています。その箇所のタップでアプリが起動され、リンク先に記載されているデモ内容が実行されます。アプリからはツールバーの「ビューアへ」ボタンをタップすることでiBooksへ戻ることが出来ます。
サンプルソースコードプロジェクトの開発環境はXcode 5です。ビルドして実機にインストールする場合には、Xcodeのプロジェクトターゲット(TARGETS)のGeneralで表示される「Build Identifier」と、Build Settingsの「Code Signing Identity」を正しく再設定してください。アプリの起動対象はiOS 6.0以上であり、iOS 7.0でも問題なく動作させることができます。
本サンプルソースコードのMacでの開発環境はXcode 5以上、アプリ動作環境はiOS 6.0以上です。Xcodeプロジェクトに含まれる各クラスの概要は次のとおりです。
「MasterViewController」デモ一覧を表示しているビューコントローラ
「DetailViewController」起動画面を表示するビューコントローラ
「AnimeViewController」Core Animationでアニメを行うビューコントローラ
「NextViewController」ビューコントローラのトランジションで表示させる
「PrintViewController」タップによるペイント描画デモ用のビューコントローラ
「PDFViewController」CATiledLayerでPDFを表示するビューコントローラ
「SetupViewController」 アプリの使い方の表示とURLスキームの変更を行う
「AboutViewController」 本アプリのアバウトを表示するビューコントローラ
「PDFView」PDFを表示するためにCATiledLayerを使うUIViewのサブクラス
「PaintView」 タップによるペイント描画デモで用いるUIViewのサブクラス
「PaintLayer」タップによるペイント描画デモで用いるCALayerのサブクラス
Core AnimationやUIViewを利用したアニメのほとんどはAnimeViewControllerクラスに実装されているselectAnimationメソッド内で実行されています。デモ番号を参照し、そこに記述されているcase文をたどれば、目的のデモを実行しているソースコードにたどり着きます。ビューコントローラが管理しているデモ用のビューやコントロルは初期状態で消されていますので(hiddenプロパティがYES)、そのnibファイルを編集する場合には注意してください。第6章「UIViewとCALayerの関係とその仕組み」におけるPDFの表示(デモ11)はPDFViewControllerクラスに、高速化を施したペン描画(デモ12)については、PaintViewControllerクラスに実装されています。
実際のサンプルソースコードは、本書籍内で紹介されているソースコードと若干異なる場合がありますのでご了承ください(デモ処理に特化するため)。サンプルソースコードには、本書籍での解説のみで、実際には使用していないルーチンやメソッドなども幾つか記述されています。
【ご注意】サンプルソースコードの使用権利はフリーです。使えるようであれば、ご自身のソースファイルへコピー&ペースしてご利用ください。ただし、その結果として発生した事象に対しては責任は負いかねますのでご了承ください。