對圖片進行局部拉伸
方法:
在 iOS 6 的時候,系統為我們提供了這樣一個方法:
//該方法返回的是UIImage類型的對象,即返回經該方法拉伸后的圖像
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode
第一個參數(UIEdgeInsets)表示原始圖像要被保護的區域
typedef struct { CGFloat top, left , bottom, right ; } UIEdgeInsets;//該參數的意思是被保護的區域到原始圖像外輪廓的上部,左部,底部,右部的直線距離,

第二個參數(UIImageResizingMode)有兩種模式:
typedef enum {
UIImageResizingModeTile,//平鋪模式,通過重復顯示UIEdgeInsets指定的矩形區域是要保護的區域,也就是不被重復顯示的區域
UIImageResizingModeStretch,//拉伸模式,通過拉伸UIEdgeInsets指定的矩形區域是我們要保護的區域,也就是不被拉伸的區域
} UIImageResizingMode;
測試:
Image對象尺寸為60*128(為行文方便,之后簡稱為原始圖像,圖3.1)
ImageView對象尺寸為180*384(為行文方便,之后簡稱為相框)

一、resizingMode參數為UIImageResizingModeStretch
當capInsets參數為UIEdgeInsetsMake(42, 0, 0, 0)時
- 原始圖像中受保護的區域(即紅色方塊區域)在Y軸方向保持了原比例,但在X軸方向進行了拉伸
- 原始圖像中未受保護的區域,直接按比例進行了拉伸

當capInsets參數為UIEdgeInsetsMake(42, 20, 42, 20)時
- 在X軸上,由於1被左邊和上邊的設置保護,3被右邊和上邊的設置保護,所以只能用中間的2來拉伸,同理最底下的7,8,9
- 在Y軸上,由於1被左邊和上邊的設置保護,7被左邊和下邊的設置保護,所以只能用中間的4來拉伸,同理最底下的3,6,9
- 由於5沒有被保護,所以在整個剩余的空間中,用5進行拉伸填充

二、resizingMode參數為UIImageResizingModeTile
當capInsets參數為UIEdgeInsetsMake(42, 0, 0, 0)時
- 原始圖像中受保護的區域(即紅色方塊區域)在Y軸方向保持了原比例,但在X軸方向進行了平鋪填充
- 原始圖像中未受保護的區域,直接按比例進行了平鋪,但不包含被保護的區域(注意觀察藍色箭頭所指的區域)

當capInsets參數為UIEdgeInsetsMake(42, 20, 42, 20)時
- 在X軸上,由於1被左邊和上邊的設置保護,3被右邊和上邊的設置保護,所以只能用中間的2來平鋪,同理最底下的7,8,9
- 在Y軸上,由於1被左邊和上邊的設置保護,7被左邊和下邊的設置保護,所以只能用中間的4來平鋪,同理最底下的3,6,9
- 由於5沒有被保護,所以在整個剩余的空間中,用5進行平鋪填充

