忘備録

日々の調べ物をまとめる。アウトプットする。基本自分用。

【Objective-C】画像の向きがIBに表示されているものと違って困った

困った現象と再現

↓の画像を。。。

f:id:mktktmr:20151123192432j:plain

こんなかんじで表示したい

f:id:mktktmr:20151123201957p:plain

なにも考えずにInterfaceBuilderで作って

f:id:mktktmr:20151123193252p:plain

シュミレータで実行したら

f:id:mktktmr:20151123192944p:plain

横向きになってしまった。。。

修正1

ググって以下のように修正

xcode UIImageを回転して保存する|田中カナた。

f:id:mktktmr:20151123195726p:plain

コード抜粋

    // imageWithCGImage scale: orientation: を使い、画像の向きを指定したImageViewを作成
    UIImage *originalImage = [UIImage imageNamed:@"DSC02551.JPG"];
    UIImage *image = [UIImage imageWithCGImage:originalImage.CGImage    // 出力したい画像のCGImageオブジェクト
                                         scale:originalImage.scale      // 画像のスケール。今回は元のスケールを利用
                                   orientation:UIImageOrientationLeft]; // 画像の向き。今回は反時計周りに90°回転させる
    self.imageView.image = image;

実行。。。

f:id:mktktmr:20151123200136p:plain

おーまいが。
向きは期待通りだけど、今度は画像のサイズが。。。

修正2

再度ググる

[iOS]UIImageViewにAspect Fillで画像を表示したらなんかはみ出しちゃった時にすること | Developers.IO

修正。

f:id:mktktmr:20151123200522p:plain

コード抜粋

    // imageWithCGImage scale: orientation: を使い、画像の向きを指定したImageViewを作成
    UIImage *originalImage = [UIImage imageNamed:@"DSC02551.JPG"];
    UIImage *image = [UIImage imageWithCGImage:originalImage.CGImage    // 出力したい画像のCGImageオブジェクト
                                         scale:originalImage.scale      // 画像のスケール。今回は元のスケールを利用
                                   orientation:UIImageOrientationLeft]; // 画像の向き。今回は反時計周りに90°回転させる
    self.imageView.image = image;
    self.imageView.clipsToBounds = YES; // YESにしないと画像がImageViewからはみ出てしまう

実行。

f:id:mktktmr:20151123200633p:plain

やっとこ期待通りになりました。
画像のサイズについては、UIImageViewのcontentModeプロパティの値がUIViewContentModeScaleAspectFitなど、ImageViewに収まるものが設定されている場合、そもそもはみ出る恐れがないので設定不要です。
今回の場合は、UIViewContentModeScaleAspectFillを設定していたので、clipsToBoundsプロパティの値をYESにしないとはみ出てしまいました。