28
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

(iOS) ImageViewのContent Modeを理解してデザイナーとエンジニアの距離を近づけよう

Posted at

前置き

 大規模の新規アプリを作っていて、デザイナーとやりとりするところで、うまくImageViewでの画像表示について伝えることができませんでした。これまで動的に変化する画像サイズを扱ったことがなく、曖昧に理解したままやっていたので、中身についてちゃんと理解しようと思った。
 

環境

  • swift 4.0
  • Xcode 9.2

(本題) ImageViewのContetModeを理解する

高さ 200px, 幅 200pxのImageViewを画面の中心に置いた状態でContentModeによってどのように画像の表示が変わるのかを見ていきます。
ちなみにContent Modeはstoryboard上ではImageViewを選択したときのInspectorで設定できます。

Main_storyboard_と_iPhone_8_Plus_-_11_2.png

コードでは次のように設定できます。

var imageView = UIImageView()
imageView.contentMode = .scaleToFill

使用する画像は横:100、縦:75の大きさです。

20150901_8625.png

それでは、各描画形式について説明します。

scaleToFit

  • ImageViewのデフォルトのContent Mode
  • 画像の比率をImageViewの比率に合わせる
  • 画像サイズの比率が変わるのであまり使ってほしくない

Kobito.a2Jr3G.png

今回のImageViewの比率は1:1ですが、画像は4:3です。
ImageViewの比率に合わせるため画像の比率が1:1になります。そのため、縦が4/3倍長くなります。

AspectFit

  • ImageViewのサイズ内で画像の比率そのままで表示
  • 画像の比率とImageViewの比率が違っていたら、ImageViewに画像が表示されない空白ができる。
  • 画像の中心とImageViewの中心は同じになる

Kobito.t8JtZr.png

個人的によく使うのがAspectFit。ImageViewのサイズ内で、画像を元の比率のまま表示する。今回のようにImageViewが1:1で画像が4:3の場合、1/4高さがあまるので、1/8ずつ上下に空白(↑画像では灰色の部分)が出来る。

AspectFill

  • ImageViewのサイズ比率そのままで、ImageViewに空白ができないように表示する。
  • ImageViewと画像の比率が違う場合、ImageViewをはみ出す
  • 画像の中心とImageViewの中心は同じになる

Kobito.8j0JGi.png

仕事でやっててこれがうまく説明できなかった。。。
画像比率そのままで、ImageViewに空白ができないように表示したい場合に、使用する。
具体的には次のような式で求められます

ImageView -> Width: Heihgt = Wa: Ha
画像 -> Width: Heihgt = Wb: Hb

Wa/Ha < Wb/Hb -> 画像が (Wb/Hb - Wa/Ha)/2ずつ ImageView左右にはみ出る
Wa/Ha > Wb/Hb -> 画像が (Wa/Ha - Wb/Hb)/2ずつ ImageView上下にはみ出る

Redraw

  • 基本的にはScaleToFillと同じ
  • ScaleToFillとの違いは、ScaleToFillがImageViewのdrawRectのところで1度呼ばれると後からは変更が聞かないのに対し、Redrawでは、drawRectが呼ばれるたびにImageViewのサイズに追従します。

Kobito.cDSvY6.png

今まで一度も使ったことないですが、上に書いたとおり、ImageViewのdrawRectが何回か呼ばれてそのサイズに画像を合わせたい場合に使うのが良さそうです。

その他(Center,Top,Left,Right...)

  • 画像サイズそのままで、ImageViewに対する位置を指定する。
  • つまり画像サイズは変わらない

(Centerに指定した場合)

Kobito.JYzaDF.png

画像の元サイズに気をつけて設定しましょう。

終わりに

参考になりましたらいいねお願いします!!

参考サイト

28
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?