せっかくのカスタムビューなんで、もう少しビジュアル強化してみます。
難易度をリングの太さじゃなく、脳みその真っ赤っか度で表現。
以下の画像Aをベースとして、そのうえに画像Bをアルファ合成だ!
こんときにアルファ合成の比率を難易度スライダの値に合わせて変化させることで、難易度があがると脳みそが赤くなるように表現してみるわけです。
使うのはFlipside.xcodeproj。
用意した画像をプロジェクトに組み込む方法は「iPhoneアプリ開発、その(22)」ね。
サンプルソースのQuartzDemoを参考にFlipsideView.hに
を用意。FlipsideView.mに画像読み込み処理
と描画処理を追加。
ここらへんのAPIは「iPhoneアプリ開発、その(58)」で紹介したQuartzDemoサンプルやオンラインマニュアルを調べて見つけていく。
ただ、ここで問題が。
読み込みはFlipsideView のinitWithFrameメソッドにでもいれりゃいいやと思ってたら、全然呼ばれね~でやんの。う~ん、xibファイルから作成される時は、このメソッド呼ばれないみたい。
こういう時はでFlipsideViewController.mのviewDidLoadメソッドだ。というか、本来こっちにいれるべきか?
viewDidLoadメソッドは自動生成時に注釈として用意されているので、注釈をはずして
を
の後に追加しFlipsideView側に
を用意して受け取るようにしました。
でもってCGImageRetainで確保したイメージはFlipsideView のdeallocでCGImageReleaseを呼んで解放。
うりゃあ、ビルドして実行、ぐわっ逆転してるううう。
以下、次回。
とりあえず、スライダにあわせて脳みその濃さが変わるよん。
------------
サンプルプロジェクト:Chimpanzee-18.zip
難易度をリングの太さじゃなく、脳みその真っ赤っか度で表現。
以下の画像Aをベースとして、そのうえに画像Bをアルファ合成だ!
こんときにアルファ合成の比率を難易度スライダの値に合わせて変化させることで、難易度があがると脳みそが赤くなるように表現してみるわけです。
使うのはFlipside.xcodeproj。
用意した画像をプロジェクトに組み込む方法は「iPhoneアプリ開発、その(22)」ね。
サンプルソースのQuartzDemoを参考にFlipsideView.hに
CGImageRef baseImage;
CGImageRef brainImage;
を用意。FlipsideView.mに画像読み込み処理
UIImage *img = [UIImage imageNamed:@"base.png"];
baseImage = CGImageRetain(img.CGImage);
img = [UIImage imageNamed:@"brain.png"];
brainImage = CGImageRetain(img.CGImage);
と描画処理を追加。
CGContextDrawImage(context, self.bounds, baseImage);
CGContextSetAlpha(context, level); ←これでスライダにあわせ変化する。
CGContextDrawImage(context, self.bounds, brainImage);
CGContextSetAlpha(context, 1.0); ←脳みそ描いたら元に戻す。
ここらへんのAPIは「iPhoneアプリ開発、その(58)」で紹介したQuartzDemoサンプルやオンラインマニュアルを調べて見つけていく。
ただ、ここで問題が。
読み込みはFlipsideView のinitWithFrameメソッドにでもいれりゃいいやと思ってたら、全然呼ばれね~でやんの。う~ん、xibファイルから作成される時は、このメソッド呼ばれないみたい。
こういう時はでFlipsideViewController.mのviewDidLoadメソッドだ。というか、本来こっちにいれるべきか?
viewDidLoadメソッドは自動生成時に注釈として用意されているので、注釈をはずして
UIImage *baseimage = [UIImage imageNamed:@"base.png"];
UIImage *barinimage = [UIImage imageNamed:@"brain.png"];
[_view setImage:CGImageRetain(baseimage.CGImage) CGImageRetain(barinimage.CGImage)];
を
[super viewDidLoad];
の後に追加しFlipsideView側に
- (void)setImage:(CGImageRef)inBaseImage brain:(CGImageRef)inBrainImage;
を用意して受け取るようにしました。
でもってCGImageRetainで確保したイメージはFlipsideView のdeallocでCGImageReleaseを呼んで解放。
- (void)dealloc {
CGImageRelease(baseImage);
CGImageRelease(brainImage);
[super dealloc];
}
うりゃあ、ビルドして実行、ぐわっ逆転してるううう。
以下、次回。
とりあえず、スライダにあわせて脳みその濃さが変わるよん。
------------
サンプルプロジェクト:Chimpanzee-18.zip