研究以下 Content Mode 的顯示效果。
Scale To Fill,Aspect Fit,Aspect Fill,Center,Top,Bottom,Left,Right,Top Left,Top Right,Bottom Left,Bottom Right。

使用的圖片大小為 750 X 750

UIImageView size 為 250 X 300
Scale To Fill

圖片會配合 ImageView 的大小充滿整個 ImageView
Aspect Fit

在 ImageView 內依照圖片等比縮放到 ImageView 的邊緣
Aspect Fill

在 ImageView 內依照圖片等比縮放充滿整個 ImageView ,如果 ImageView 和圖片的比例不一樣,就會超出 ImageView 的範圍,
Center, Top, Bottom, Left, Right, Top Left, Top Right, Bottom Left, Bottom Right

依照圖片尺寸原比例顯示圖片的 中、下、左、右、左上、右上、左下、右下,如果圖片尺寸本來就比 ImageView 還大,就會超出 ImageView,這時候可以勾選 Clips to Bounds,會把超出 ImageView 的部分隱藏
Redraw
最後 Redraw 這個東西用在 ImageView 上似乎效果跟 Scale To Fill 一樣,去官方的文件看了一下

又 google 了一下看到似乎跟 drawRect 這個東西有關,我就自己做了一個自己的 ImageView 來觀察一下 draw(_ rect: CGRect)
但似乎都沒有被呼叫到,知我又找到了一篇文章也是在介紹 ContentMode,但是他的範例是用 UIView 做的,drawRect 也真的有被順利呼叫到了

LogredrawView, redraw
scaleToFillView, redraw
----- onTransform -----
redrawView, redraw
分別用 UIView 的 Scale To Fill 和 Redraw 和 UIImageView 的 Redraw 做比較,在我按下變形的時候會直接把這三個的 bounds 改變,從 Log 可以看到,只有 redrawView 的 drawRect,有被呼叫到,只要 bounds 每改變一次就會被呼叫一次,效果就跟自己呼叫 setNeedsDisplay()
一樣,如果 scaleToFillView 在改變 bounds 後自己在呼叫 setNeedsDisplay()
一次,那效果就跟 redraw 一樣了。
程式碼