網絡/相機獲取圖片時如何避免圖片變形

前言

  • 在寫項目時,要顯示從相機獲取的圖片,比如將它顯示在一個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的
  • 有關其中的詳細實現,可以看下第二篇參考文章

參考文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章