前回紹介したサンプルソース

iPhoneCoreDataRecipes

 の何がすごいかというと、

iPhone OS Table Viewプログラミングガイド

 とか読んでもいまいちわからんかったxibファイルからのUITableViewCell読み込み方法がわかるって事と、UITableViewはヘッダー(セクションヘッダーのことじゃなく)を持てるって事がわかるんですな。
 エリカちゃんもビックリ(英語版のセカンドエディッションでは紹介されてるのかもね)。

$テン・シー・シー-1

 もともとの目的は、UIImageの縮小方法の調査だったんだけど、思わぬ拾いものですわ。
 まあ、それはいったん置いといてUIImageの縮小方法。
 わりと簡単で
1、UIGraphicsBeginImageContextで画面外に描画領域を作る。
2、画面外描画領域で描画作業
3、終わった時点でUIGraphicsGetImageFromCurrentImageContextを呼んで、画面外描画領域をUIImageにする。
4、UIGraphicsEndImageContextで作った画面外描画領域を破棄。

 そんな感じなり。
 で、画面外描画領域の矩形をボタン領域をはみ出さないで、なおかつ、元画像の縦横比を保つ大きさに計算して面外描画領域作成。

$テン・シー・シー-2

 描画領域全体に元画像を描画し、これをUIImageとして取り出す事でスケーリングが完了ってわけです。

$テン・シー・シー-3

 NewFlowerViewControllerクラスのimagePickerControllerメソッドへの実装はこんな感じ。
// 自分が作りたい画像の大きさを決めて描画領域を作る。
CGRect bounds = [imageButton
contentRectForBounds:imageButton.bounds];
// ボタンの内容部高さ x 0.95を最大とする。
double wide = bounds.size.height * 0.95;
CGSize size = image.size;
CGFloat ratio = 0;
if (size.width > size.height) {
// 横長なので、横幅で比率計算。
ratio = wide / size.width;
} else {
// 縦長。
ratio = wide / size.height;
}
CGRect rect = CGRectMake(0.0, 0.0,
ratio * size.width, ratio * size.height);
// 計算した描画領域を指定して描画準備。
UIGraphicsBeginImageContext(rect.size);
// UIGraphicsGetImageFromCurrentImageContextが呼ばれるまで
// 描画はすべて新しい描画領域が対象となる。
[image drawInRect:rect]; // イメージ描画。
// 新しい描画領域からUIImageを作成。
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext(); // 解除。
// スケーリングされたUIImageを設定。
[imageButton setImage:image forState:UIControlStateNormal];
// 説明文は消す。
[imageButton setTitle:nil forState:UIControlStateNormal];

 ビルドして実行。

$テン・シー・シー-4

 おっしゃ、こんなもんでしょう。
[image drawInRect:rect]; // イメージ描画。
[[UIColor grayColor] set];
UIFont *font = [UIFont boldSystemFontOfSize:24];
CGPoint point = CGPointMake(2,1);
[@"Flower" drawAtPoint:point withFont:font];

// 新しい描画領域からUIImageを作成。
image = UIGraphicsGetImageFromCurrentImageContext();

 文字なんぞ入れてみたりして。

$テン・シー・シー-5

 描画領域だから、なんだって描ける。
 調子のってきた。
 もういっちょ、お勧めのサンプルソース

TheElements

 から、写真の下に鏡を置いたようにする方法(カバーフローでやってるやつね)

$テン・シー・シー-6

 グッドだ!
 でも、この花は?の目的考えると、これはやりすぎですな。

 この花は?では使わないけど、あとあと有効に使えそうだから便利関数として用意しちゃおう。
 というわけで、長くなりそうなんで、次回「UIImageインスタンスから上下反転してグラデーションをかけたUIImageインスタンスを作成する方法」。
 サンプルソースも次回!

 待てねーよ、な人はAppleのサンプルTheElementsを調べましょう。reflectedImageRepresentationWithHeightで検索すると出てくるよ。
 こっちはUIViewのlayerを描画したりしてて、あー、こうやって反転アニメーションの画像を用意するわけねってのがわかったりする。読む価値有りですよ。

 ではでは。