效果如下圖所示
一随闽、簡介
日常開發(fā)中,可能需要使用 圓角圖片
作為按鈕的背景圖威彰,不需要設(shè)置按鈕的圓角半徑出牧。但是當(dāng)按鈕的尺寸發(fā)生改變時,邊角也會被拉伸歇盼,如上圖
為了解決上述問題舔痕,可使用 UIImage
的 resizableImageWithCapInsets
和 stretchableImageWithLeftCapWidth
兩種方法
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode NS_AVAILABLE_IOS(6_0); // the interior is resized according to the resizingMode
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight __TVOS_PROHIBITED;
二、 resizableImageWithCapInsets
此方法是定義指定區(qū)域被拉伸豹缀,從 上
伯复、左
、下
邢笙、右
分別在圖片上畫一個矩形框啸如,范圍內(nèi)的區(qū)域被拉伸,外部保持不變
image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(0,10,0,10) resizingMode:UIImageResizingModeStretch];
UIEdgeInsetsMake(0,10,0,10)
: 表示上左下右邊距 10氮惯,不會被拉升叮雳,其余部分(被邊距劃出來的矩形區(qū)域)會被拉伸。 這里的 邊距10
一般表示圓角半徑
UIImageResizingModeStretch
: 通過拉伸 UIEdgeInsets 指定的的矩形區(qū)域來填充圖片
UIImageResizingModeTile
: 通過重復(fù)顯示 UIEdgeInsets 指定的矩形區(qū)域來填充圖片
三筐骇、stretchableImageWithLeftCapWidth
此方法是通過設(shè)置 左邊不拉伸區(qū)域?qū)挾?/code>和
上面不拉伸區(qū)域的高度
來達(dá)到邊角不拉伸的效果
NSUInteger leftCapWidth = image.size.width*0.5;
NSUInteger topCapHeight = 0;
image = [image stretchableImageWithLeftCapWidth:leftCapWidth
topCapHeight:topCapHeight];
leftCapWidth
:左邊不拉伸區(qū)域的寬度
topCapHeight
:上面不拉伸區(qū)域的高度
擴(kuò)展:
rightCapWidth
= 圖片寬度 - leftCapWidth - 1
bottomCapHeight
= 圖片高度 - topCapHeight - 1
而拉伸區(qū)域 capInset 實(shí)際上是(topCapHeight,leftCapWidth,bottomCapHeight,rightCapWidth)
所以债鸡,一般leftCapWidth
取 圖片寬度 的一半
江滨,topCapHeight
取圖片高度 的一半铛纬,來獲取拉伸區(qū)域1*1
的矩陣來 復(fù)制填充(UIImageResizingModeTile)
,保持外圍的區(qū)域不變
四唬滑、 封裝方法
為了使用方便告唆,將兩個方法簡單封裝了一下
// 拉伸圖片棺弊,可解決氣泡背景圖,圓角按鈕背景圖擒悬,修改尺寸邊角被拉伸變形的問題
+ (UIImage *)chx_resizableImage:(UIImage *)image {
NSInteger leftCatpWidth = image.size.width * 0.5;
NSInteger topCapHeight = image.size.height * 0.5;
return [image stretchableImageWithLeftCapWidth:leftCatpWidth topCapHeight:topCapHeight];
}
// 指定 上模她、左、下懂牧、右 的區(qū)域拉伸圖片侈净,范圍外不拉伸
+ (UIImage *)chx_resizableImageWithCapInsets:(UIEdgeInsets)capInsets
image:(UIImage *)image {
return [image resizableImageWithCapInsets:capInsets resizingMode:UIImageResizingModeStretch];
}