Core Graphicsを更に使いこなそう! (2/6)
作成:2011-04-18 07:50
更新:2011-04-18 07:50
更新:2011-04-18 07:50
■イメージの描画は?
次は、「イメージファイルを読み込んで表示する」ということについてです。簡単な図形を描くことはできるようになりましたが、複雑な図形は、すべてコードで描いていくより、あらかじめイメージファイルとして用意したものをそのまま読み込んで描画できたほうが圧倒的に楽ですね。
では、実際に簡単な描画を行ってみましょう。まずは、表示するイメージファイルを用意します。ここでは、「sample.jpg」というファイル名で作成することにします。サイズは適当でかまいませんが、iphoneの画面に収まるぐらいの大きさで考えてください。そして作成したらプロジェクトのクラスやnibファイルなどが保管されているフォルダにコピーします。
イメージファイルをそのままXcodeのプロジェクトナビゲーター(ファイルなどが一覧リストで表示されるところ)にドラッグ&ドロップすれば組み込まれます。なおXcode 4では、この際、ターゲットへの組み込みやファイルをコピーするかどうかなどを尋ねてきます。このあたりはデフォルトのままにしておいてかまいません。
プロジェクトにイメージを追加したら、続いてこのイメージをクラス内に保管し、描画するための準備を整えましょう。描画はdrawRect:で行いますが、ここで描画のたびにイメージをファイルからロードして……などとやるのはあまりいいやり方とは思えません。
あらかじめイメージを保管するプロパティなどを用意しておき、起動時にイメージのロードを行っておく。そしてdrawRect:では、そのプロパティに保管したイメージのオブジェクトを描画する。――このような形にすれば、いちいち表示のたびにイメージを読み込むこともなくなります。
下のリスト欄に、イメージを保管するためのプロパティを組み込んだソースコードを挙げておきました。ビットマップイメージを扱うための機能は、iOSでは「UIImage」というクラスとして用意されています。ファイルからイメージを読み込んでUIImageインスタンスとして保管しておけば、後はいつでも必要に応じてイメージが利用できるようになります。
ここでは、.hファイルにUIImage *myimg;というインスタンス変数を用意し、これを利用するプロパティ@property (retain) UIImage *myimg;を用意しておきました。.mファイル側には、@synthesize myimg;を用意しておきます。これでUIImageをプロパティとして保管する準備は整いました。
ファイルからイメージをロードしてUIImageインスタンスを作成するには、「awakeFromNib」というメソッドを利用しています。これは、nibファイルを使って画面を生成したときに呼び出されるものです。nibファイルを利用している場合、initWithFrame:に初期化処理を記述してもうまく動いてくれません。このため、nibファイルにこのクラスを部品として配置し利用する場合は、このawakeFromNibを使って初期化処理を用意するのが良いでしょう。
では、実際に簡単な描画を行ってみましょう。まずは、表示するイメージファイルを用意します。ここでは、「sample.jpg」というファイル名で作成することにします。サイズは適当でかまいませんが、iphoneの画面に収まるぐらいの大きさで考えてください。そして作成したらプロジェクトのクラスやnibファイルなどが保管されているフォルダにコピーします。
イメージファイルをそのままXcodeのプロジェクトナビゲーター(ファイルなどが一覧リストで表示されるところ)にドラッグ&ドロップすれば組み込まれます。なおXcode 4では、この際、ターゲットへの組み込みやファイルをコピーするかどうかなどを尋ねてきます。このあたりはデフォルトのままにしておいてかまいません。
プロジェクトにイメージを追加したら、続いてこのイメージをクラス内に保管し、描画するための準備を整えましょう。描画はdrawRect:で行いますが、ここで描画のたびにイメージをファイルからロードして……などとやるのはあまりいいやり方とは思えません。
あらかじめイメージを保管するプロパティなどを用意しておき、起動時にイメージのロードを行っておく。そしてdrawRect:では、そのプロパティに保管したイメージのオブジェクトを描画する。――このような形にすれば、いちいち表示のたびにイメージを読み込むこともなくなります。
下のリスト欄に、イメージを保管するためのプロパティを組み込んだソースコードを挙げておきました。ビットマップイメージを扱うための機能は、iOSでは「UIImage」というクラスとして用意されています。ファイルからイメージを読み込んでUIImageインスタンスとして保管しておけば、後はいつでも必要に応じてイメージが利用できるようになります。
ここでは、.hファイルにUIImage *myimg;というインスタンス変数を用意し、これを利用するプロパティ@property (retain) UIImage *myimg;を用意しておきました。.mファイル側には、@synthesize myimg;を用意しておきます。これでUIImageをプロパティとして保管する準備は整いました。
ファイルからイメージをロードしてUIImageインスタンスを作成するには、「awakeFromNib」というメソッドを利用しています。これは、nibファイルを使って画面を生成したときに呼び出されるものです。nibファイルを利用している場合、initWithFrame:に初期化処理を記述してもうまく動いてくれません。このため、nibファイルにこのクラスを部品として配置し利用する場合は、このawakeFromNibを使って初期化処理を用意するのが良いでしょう。
myimg = [UIImage imageNamed:@"sample.jpg"];ここでは、UIImageクラスの「imageNamed:」というメソッドを使ってインスタンスを作成しています。これは引数にファイル名を指定するだけで、それを読み込んでUIImageインスタンスを作成できます。UIImage利用の基本とも言えるものですね。こうして生成したインスタンスを、myimgプロパティに設定しています。――さあ、これでイメージ利用の準備は整いました!
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※MySampleView.h #import <UIKit/UIKit.h> @interface MySampleView : UIView { UIImage *myimg; } @property (retain) UIImage *myimg; @end ※MySampleView.m #import "MySampleView.h" @implementation MySampleView @synthesize myimg; - (id)initWithFrame:(CGRect)frame{……略……} // 新たに追加したメソッド - (void)awakeFromNib { myimg = [UIImage imageNamed:@"sample.jpg"]; } - (void)drawRect:(CGRect)rect { // ここでUIImageを描けばいいはず } - (void)dealloc{……略……} @end
※関連コンテンツ
「初心者のためのiphone/ipadプログラミング入門」に戻る