UIViewのcontentsサイズについて

48 views
Skip to first unread message

Kouji Mimura

unread,
Feb 26, 2010, 12:36:25 PM2/26/10
to MacSel.WorkShop
こんばんは
三村です。

ちょっと開発で行き詰まってしまったので教えて下さい。

UIImageViewに画像を設定し、表示している画像のサイズと同じ大きさのUIViewを画像の上に重ねるという処理を実装しようとしていま
す。
UIImageViewに画像を設定する前にcontentModeにUIViewContentModeScaleAspectFitを設定している
ので
自動的にリサイズされ、UIImageViewにちょうど納まるサイズにしています。

この自動リサイズ後の画像のサイズを取得したいのですが、うまくいきません。
UIImageView側のCALayerにcontentsRectというプロパティを発見したので、
このCGRectを元にUIViewをinitWithFrameすればよいのかと思いましたがうまくいかず。。。
CGRectの中身を確認した所、数値が小数点やマイナスであったりなので通常のCGRectの持ち方と違うのでしょうか?

よろしければご教授の程、よろしくお願い致します。

MACASEL森本

unread,
Feb 27, 2010, 2:46:59 AM2/27/10
to MacSel.WorkShop
To:三村さん

まいど、森本です。

CGRectMakeは Image のどの領域を描画するかを決める矩形値ですので
自動リサイズ後の画像のサイズを取得する為には利用できません。

imageView = [[UIImageView alloc] initWithImage:[UIImage
imageNamed:@"hoge.png"]];
imageView.layer.contentsRect = CGRectMake(0, 0, 0.5, 0.5);

hoge.pngが 100×100 だとします。
例えば上記だと imageView の描画領域に hoge.png の (0, 0, 50, 50) の領域が描画されます。
実際にテストしてみるとわかりやすいと思います。

自動リサイズ後の画像のサイズを取得したいということですが、このパラメーターは公開されていないようです。
私も興味があったので調べてみました。
いくつかの調査を行い、内部処理としてはイメージサイズを変更するのではなく投影方法を変えているだけだと解りました。
つまりアフィン変換を使っていると考えることができます。
現状の公式SDKでは自動リサイズ後の画像のサイズを取得する事は難しいですね。

元画像のサイズは UIImage の size プロパティで取得することが可能ですのでご自身でリサイズ後のサイズを計算する方法がベターかと思い
ます。

Kouji Mimura

unread,
Feb 27, 2010, 11:56:06 AM2/27/10
to MacSel.WorkShop
To:森本さん

こんばんは
三村です。

なるほど、CGRectの仕様を勘違いしていました。(描画領域の位置とサイズを保持するのかと。。。)
自動リサイズは画像のサイズ自体を変更しているのかと思いきやアフィン変換していたのですね。
リサイズ後のサイズは計算メソッドを独自で用意して対応する事にします。

助かりました!調査までして頂き、ありがとうございます。

MACASEL森本

unread,
Feb 28, 2010, 7:25:33 PM2/28/10
to MacSel.WorkShop
あ、記述に間違いがありましたね。

CGRectMakeは Image のどの領域を描画するかを決める矩形値ですので

contentsRect は Image のどの領域を描画するかを決める矩形値ですので

が正しいです。

Reply all
Reply to author
Forward
0 new messages