Quartz 2Dの能力を十分発揮させたければ、UIKitなどの別フレームワークとの違いを把握することが肝要です。例えば、UIViewでの描画は左上原点ですが、Quartz 2Dでは左下原点での描画です。画像データの表現も、UIKitではUIImageクラスを使いますが、Quartz 2DではCGImageRefを使います。UIKitには、UIBezierPathクラスなどQuartz 2Dを使わない描画機能も多数あるため、開発するアプリに合わせた適切な選択が必要となります。本アプリと書籍では、Core Graphicsの中でもQuartz 2D APIに特化したサンプルソースコードを幾つか紹介することで、フレームワークの活用方法の習得を目指します。
著者:有限会社オッティモ 小池邦人
書籍は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でも問題なく動作させることができます。
「MasterViewController」デモ一覧を表示しているビューコントローラ
「DetailViewController」起動画面を表示するビューコントローラ
「QuartzViewController」Quartz 2Dよる描画デモを行うビューコントローラ
「PaintViewController」タップによるペイント描画デモ用のビューコントローラ
「PrintViewController」 AirPrint経由で行う印刷デモ用のビューコントローラ
「AboutViewController」本アプリのアバウトを表示するビューコントローラ
「SetupViewController」 アプリの使い方の表示とURLスキームの変更を行う
「QuartzView」drawRect:メソッドでデモ描画を行なうUIViewのサブクラス
「PaintView」 タップによるペイント描画デモで使うUIViewのサブクラス
「PaintLayer」タップによるペイント描画デモで使うCALayerのサブクラス
「ImagePrintPageRenderer」印刷デモで用いるAirPrint用レンダラークラス
Quartz 2DやUIKitを利用した2D描画のほとんどはQuartzViewControllerクラスに配置されているQuartzViewクラスのdrawRect:メソッドで実行されています。デモ番号を参照し、そこに記述されているcase文をたどれば、目的のデモを実行しているソースコードにたどり着きます。例外として、CALayerを用いた描画(デモ19、20、21)については、QuartzViewControllerで処理されていますのでご注意ください。第10章「描画の最適化を行う」における高速化を試したペン描画(デモ22)についてはPaintViewControllerクラスに、第15章「PDF操作とビューの印刷(AirPrint)」の印刷(デモ35)に関してはPrintViewControllerクラスに実装されています。
実際のサンプルソースコードは、 本書籍内で紹介されているソースコードと若干異なる場合がありますのでご了承ください(デモ処理に特化するため)。デモのサンプルソースコードには、本書籍での解説のみで、実際には使用していないルーチンやメソッドなどが幾つか記述されています。参考にしてみてください。
【ご注意】サンプルソースコードの使用権利はフリーです。使えるようであれば、ご自身のソースファイルへコピー&ペースしてご利用ください。ただし、その結果として発生した事象に対しては責任は負いかねますのでご了承ください。