前言
- 在寫項目時,要顯示從相機獲取的圖片,比如將它顯示在一個UIImageView上,但是由於相機有橫屏與豎屏拍攝,導致圖片的尺寸,長寬比都是不一定的
- 如果直接把不合適的圖片塞到UIImageView裏,圖片會變形,強行適應frame
contentMode
介紹
- contentMode就是一個屬於UIImageView的枚舉型屬性,即填充屬性
typedef NS_ENUM(NSInteger, UIViewContentMode) {
//圖片拉伸填充至整個UIImageView(圖片可能會變形),這也是默認的屬性,如果什麼都不設置就是它在起作用
UIViewContentModeScaleToFill,
//圖片拉伸至完全顯示在UIImageView裏面爲止(圖片不會變形)
UIViewContentModeScaleAspectFit,
//圖片拉伸至圖片的的寬度或者高度等於UIImageView的寬度或者高度爲止.看圖片的寬高哪一邊最接近UIImageView的寬高,一個屬性相等後另一個就停止拉伸.
UIViewContentModeScaleAspectFill,
//調用setNeedsDisplay 方法時,就會重新渲染圖片
//下面的屬性都是不會拉伸圖片的
UIViewContentModeRedraw,
//中間模式
UIViewContentModeCenter,
//頂部
UIViewContentModeTop,
//底部
UIViewContentModeBottom,
//左邊
UIViewContentModeLeft,
//右邊
UIViewContentModeRight,
//左上
UIViewContentModeTopLeft,
//右上
UIViewContentModeTopRight,
//左下
UIViewContentModeBottomLeft,
//右下
UIViewContentModeBottomRight,
};
UIViewContentModeScaleAspectFill
- 一般使用UIViewContentModeScaleAspectFill屬性來防止圖片被拉伸,因爲他會率先去匹配你設置的長和寬,在這個基礎上保持長寬比的設置圖片,這樣也可以讓你的佈局不至於完全變形
- 也就是說設置成UIViewContentModeScaleAspectFill後,會確保長寬中的一個是符合你設置的frame的
- 有關其中的詳細實現,可以看下第二篇參考文章
參考文章