2011年1月
« 12月   3月 »
 12
3456789
10111213141516
17181920212223
24252627282930
31  
2011/01/08

iPhoneアプリの画面描画

音については「iPhoneで音を鳴らす」で書きましたが、画面描画はまだだったので簡単なまとめを。
画面の描画については、大まかに分けて3つあります。

1)標準で用意されているクラスを使う。
2)CoreGraphics(Quartz)を使う。
3)OpenGL ESを使う。

以下それぞれの簡単な説明です。

1)標準で用意されているクラスを使う。

ナビゲーションバーやボタンなど、標準的なUIは用意されています。

Appleのサンプルコード「UICatalog」で、どのような部品があるかを確認できます。

画面はSDKの中に入っているアプリ「InterfaceBuilder」で作ることも、1から自分でプログラムを書いて作る事もできます。

例えば、UIButtonを使う為のプログラムを自前で書くとすると、初期化、UIViewへの追加、ラベルの設定、アクションの設定などを、ひとつひとつ記述する必要がありますが、InterfaceBuiderを使うとこのあたりの事はGUIを使って出来て、アクションの内容だけプログラムを書けばいい状態にできるので、InterfaceBuilderを使いこなすと開発効率がいいです。

標準で用意されいてる部品については、大抵の入門向けの書籍では紹介されていると思います。

 

2)CoreGraphics(Quartz)を使う。

標準的な部品では足りない場合は、UIViewのdrawRectの中でCoreGraphicsのAPIを使って描画する事ができます。

ビットマップなどのラスター画像を描画する為のAPIや、ベクターグラフィックスを描画する為のAPIなどが用意されています。

CoreGraphics以外にも、UIViewやNSStringにもdraw系のメソッドが用意されているので、drawRect内で呼び出して画面描画を行えます。

画面の描画速度を上げる工夫は、プログラム上である程度はできますが、基本的にアクションゲームやシューティングゲームなどの、高いフレームレート(1秒あたりに何回画面を書き換えるか)が要求されるアプリには向いていません。

30fpsや60fpsなどの高いフレームレートが必要なアプリは、2Dの描画にもOpenGLを使用する必要があります。

iPhoneのCoreGraphicsについては、細かい所まで紹介されている書籍は無さそうですが、色々な書籍で線や画像を描画するような基本的な所は紹介されています。

 

3)OpenGL ESを使う。

3Dグラフィックを描画する為のAPIです。

ハードウェアのアクセラレーションが効く為に、2Dの描画でもOpenGLを使うのが最速です。

iPhone、iPod touch、iPadで使われているOpenGL ESにはバージョン1.0と2.0があります。

サポートする端末や実現したい事によって、対応方法を検討する必要があります。

XCodeでテンプレート「OpenGL ES Application」でプロジェクトを作成すると、OpenGL ES 2.0対応端末では2.0で初期化し、非対応端末では1.0で初期化するようなプログラムが生成されます。

今となってはなかなか無いことだと思いますが、iOS 3.1より前のバージョンにも対応する場合は、CADisplayLinkを使って画面の更新処理を行っている部分を、NSTimerを使って処理するように変更する必要があります。

iPhoneのOpenGL ESについては、以下の書籍に詳しく書かれています。

同じViewの中でOpenGLとその他を混在させるのはApple非推奨だったかと思いますが、アプリを起動した時のメニュー画面は標準的な部品で描画して、ゲーム画面はOpenGLを使うというような事はできるので、かなり自由に使えます。

独自で実装するView以外をInterfaceBuilder上で作っておいて、独自で実装する部分だけプログラムを書くというような作り方もできます。

それぞれの細かい話はまたの機会に。


※iPhoneやiPadなどのiOSアプリ開発に関する投稿を今から始めるiPhoneアプリ開発にまとめました。

Leave a Reply

  

  

  


*

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">