圖片拉伸__resizableImageWithCapInsets:的學(xué)習(xí)

在給視圖添加image的時(shí)候, 通常會(huì)遇到這樣一個(gè)問題, 就是如果視圖和image的大小如果不一樣, 就會(huì)出現(xiàn)各種各樣的問題. 那我們?cè)鯓硬拍軐?shí)現(xiàn)圖片在不變形的情況下實(shí)現(xiàn)展示呢?

方法:

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode

方法介紹和說明:

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode
//該方法返回的是UIImage類型的對(duì)象,即返回經(jīng)該方法拉伸后的圖像
//傳入的第一個(gè)參數(shù)capInsets是UIEdgeInsets類型的數(shù)據(jù),即原始圖像要被保護(hù)的區(qū)域
//這個(gè)參數(shù)是一個(gè)結(jié)構(gòu)體,定義如下
//typedef struct { CGFloat top, left , bottom, right ; } UIEdgeInsets;
//該參數(shù)的意思是被保護(hù)的區(qū)域到原始圖像外輪廓的上部,左部,底部,右部的直線距離,參考下圖
//傳入的第二個(gè)參數(shù)resizingMode是UIImageResizingMode類似的數(shù)據(jù),即圖像拉伸時(shí)選用的拉伸模式,
//這個(gè)參數(shù)是一個(gè)枚舉類型,有以下兩種方式
//UIImageResizingModeTile, 平鋪 
//UIImageResizingModeStretch, 拉伸```


該圖中, 標(biāo)識(shí)top, left, bottom, right 的區(qū)域?yàn)楸Wo(hù)區(qū), 是不可編輯的區(qū)域, 那么中間的部分就是我們拉伸的區(qū)域
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/1803308-6b7d433b288d447e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

###具體使用:
有圖片:  Image對(duì)象尺寸為60`*`128
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/1803308-bca57e03b49926aa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)



視圖: ImageView對(duì)象尺寸為180`*`384
***
####step1: 拉伸模式
resizingMode參數(shù)為UIImageResizingModeStretch
######<1>capInsets參數(shù)為UIEdgeInsetsMake(0, 0, 0, 0)時(shí)

![33B8A539-53EC-4AB8-8665-14B8B90D120A.png](http://upload-images.jianshu.io/upload_images/1803308-e7171a883993d63e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


######<2>capInsets參數(shù)為UIEdgeInsetsMake(42, 0, 0, 0)時(shí)
當(dāng)我們向拉伸方法傳入該組參數(shù)時(shí),代表我們對(duì)原始圖像上部的三分之一進(jìn)行保護(hù)(即紅色方塊區(qū)域).其拉伸效果如圖
<li>原始圖像中受保護(hù)的區(qū)域(即紅色方塊區(qū)域)在Y軸方向保持了原比例,但在X軸方向進(jìn)行了拉伸
<li>原始圖像中未受保護(hù)的區(qū)域,直接按比例進(jìn)行了拉伸

![D29F0C4B-3B02-4609-A390-62F8C8DDF0DD.png](http://upload-images.jianshu.io/upload_images/1803308-265d5e8da8dee64e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

######<3>capInsets參數(shù)為UIEdgeInsetsMake(0,20, 0, 0)時(shí)
當(dāng)我們向拉伸方法傳入該組參數(shù)時(shí),代表我們對(duì)原始圖像左部的三分之一進(jìn)行保護(hù)(即紅色方塊區(qū)域)
<li>原始圖像中受保護(hù)的區(qū)域(即紅色方塊區(qū)域)在X軸方向保持了原比例,但在Y軸方向進(jìn)行了拉伸
<li>原始圖像中未受保護(hù)的區(qū)域,直接按比例進(jìn)行了拉伸

![49A999A7-FF60-4C8F-AE63-430A0CD80108.png](http://upload-images.jianshu.io/upload_images/1803308-ed8efb8a56850c3d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


######<4>capInsets參數(shù)為UIEdgeInsetsMake(42, 20, 42, 20)時(shí)
當(dāng)我們向拉伸方法傳入該組參數(shù)時(shí),代表我們對(duì)原始圖像除數(shù)字5以外的區(qū)域進(jìn)行保護(hù)(即兩個(gè)紅色方塊圍起來的區(qū)域)
<li>在X軸上,由于1被左邊和上邊的設(shè)置保護(hù),3被右邊和上邊的設(shè)置保護(hù),所以只能用中間的2來拉伸,同理最底下的7,8,9
<li>在Y軸上,由于1被左邊和上邊的設(shè)置保護(hù),7被左邊和下邊的設(shè)置保護(hù),所以只能用中間的4來拉伸,同理最底下的3,6,9
<li>由于5沒有被保護(hù),所以在整個(gè)剩余的空間中,用5進(jìn)行拉伸填充

***

####step2: 平鋪模式
resizingMode參數(shù)為resizingMode參數(shù)為UIImageResizingModeTile
######<1>capInsets參數(shù)為UIEdgeInsetsMake(0, 0, 0, 0)時(shí)
當(dāng)我們向拉伸方法傳入該組參數(shù)時(shí),代表我們未對(duì)原始圖像的任何區(qū)域進(jìn)行保護(hù).其平鋪效果如圖
在該種情況下,我們發(fā)現(xiàn)原始圖像按比例填充了相框,因此我們將該情況當(dāng)做拉伸模式下的默認(rèn)狀況
在之后的實(shí)驗(yàn)中,我們將該種狀況當(dāng)做參考對(duì)象,顯示在界面的右下角

![719D6458-A3FF-4755-B651-4E75B3DDFC9E.png](http://upload-images.jianshu.io/upload_images/1803308-7abe8263489f50bd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
######<2>capInsets參數(shù)為UIEdgeInsetsMake(42, 0, 0, 0)時(shí)
當(dāng)我們向拉伸方法傳入該組參數(shù)時(shí),代表我們對(duì)原始圖像上部的三分之一進(jìn)行保護(hù)(即紅色方塊區(qū)域)
<li>原始圖像中受保護(hù)的區(qū)域(即紅色方塊區(qū)域)在Y軸方向保持了原比例,但在X軸方向進(jìn)行了平鋪填充
<li>原始圖像中未受保護(hù)的區(qū)域,直接按比例進(jìn)行了平鋪,但不包含被保護(hù)的區(qū)域(注意觀察藍(lán)色箭頭所指的區(qū)域)
![84184D06-B05A-44A7-B3FC-8FBB50FA8C05.png](http://upload-images.jianshu.io/upload_images/1803308-2e974ce67c6d8549.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

######<3>capInsets參數(shù)為UIEdgeInsetsMake(0,20, 0, 0)時(shí)
當(dāng)我們向拉伸方法傳入該組參數(shù)時(shí),代表我們對(duì)原始圖像左部的三分之一進(jìn)行保護(hù)(即紅色方塊區(qū)域)
<li>原始圖像中受保護(hù)的區(qū)域(即紅色方塊區(qū)域)在X軸方向保持了原比例,但在Y軸方向進(jìn)行了平鋪填充
<li>原始圖像中未受保護(hù)的區(qū)域,直接按比例進(jìn)行了平鋪,但不包含被保護(hù)的區(qū)域(注意觀察藍(lán)色箭頭所指的區(qū)域)



![4073BA92-A6BB-45B4-A61B-AAA58B15C114.png](http://upload-images.jianshu.io/upload_images/1803308-462fca2e1ab9ddf3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

######<4>capInsets參數(shù)為UIEdgeInsetsMake(42, 20, 42, 20)時(shí)
當(dāng)我們向拉伸方法傳入該組參數(shù)時(shí),代表我們對(duì)原始圖像除數(shù)字5以外的區(qū)域進(jìn)行保護(hù)(即兩個(gè)紅色方塊圍起來的區(qū)域)
<li>在X軸上,由于1被左邊和上邊的設(shè)置保護(hù),3被右邊和上邊的設(shè)置保護(hù),所以只能用中間的2來平鋪,同理最底下的7,8,9
<li>在Y軸上,由于1被左邊和上邊的設(shè)置保護(hù),7被左邊和下邊的設(shè)置保護(hù),所以只能用中間的4來平鋪,同理最底下的3,6,9
<li>由于5沒有被保護(hù),所以在整個(gè)剩余的空間中,用5進(jìn)行平鋪填充



![51866768-1BE9-40C5-9C39-41EC5C6FB1AD.png](http://upload-images.jianshu.io/upload_images/1803308-880a0a6afb69a874.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


原文鏈接:http://www.lxweimin.com/p/a577023677c1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 返回一張受保護(hù)且被拉伸的圖片 應(yīng)用場景:聊天窗口的氣泡 方法一(棄用): iOS 5.0以前使用(棄用)這個(gè)方法會(huì)...
    林安530閱讀 15,928評(píng)論 1 36
  • 對(duì)于圖片拉伸是移動(dòng)開發(fā)中很常見的需求,在前一陣子做項(xiàng)目中需要做一個(gè)類似于QQ聊天氣泡,這個(gè)氣泡會(huì)根據(jù)文字的多少而變...
    Joy___閱讀 14,163評(píng)論 27 159
  • 【墨竹的菜園】0380——行萬里路,拜萬人師,讀萬卷書,這是我給自己定的學(xué)習(xí)修行方法,而且這三條的順序有先后:先行...
    墨竹的菜園閱讀 671評(píng)論 0 2
  • 很多不平靜的思緒又開始擾亂我用了很多努力才得以平息的脈搏,卻因?yàn)橛X得花上一些寶貴的時(shí)間去喚醒心底里那些文字近乎成了...
    路還長天會(huì)亮閱讀 189評(píng)論 0 1
  • 去年暑假,我參加了一個(gè)閱讀競賽營,每天走到教室就能聞到一股濃烈的“火藥味”——因?yàn)闋I員們分為兩個(gè)隊(duì),女生...
    丫丫zyc閱讀 415評(píng)論 0 0