iOS圖片拉伸(resizableImage)

返回一張受保護(hù)且被拉伸的圖片

應(yīng)用場景:聊天窗口的氣泡

方法一(棄用):

iOS 5.0以前使用(棄用)這個方法會自動計算出偏向中間的一個1*1的方格也就是被拉伸的地方(默認(rèn)使用拉伸),一般傳入的值為圖片大小的一半.

[image stretchableImageWithLeftCapWidth:imageHeight *0.5 topCapHeight:imageHeight *0.5 ];

方法二(常用):

將圖片沒有保護(hù)的部分進(jìn)行拉伸。
上下左右的值定義了受保護(hù)區(qū)域,能被拉伸的地方是中間區(qū)域,一般我們都設(shè)成中心點為了安全。

// 1. 直接傳入保護(hù)的范圍,沒有設(shè)置圖拉伸的模式,默認(rèn)為UIImageResizingModeTile(瓦片式)就是將圖片以原來的大小就行平鋪顯示
[image resizableImageWithCapInsets:UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)];
// 2. 設(shè)置圖片拉伸的模式
// UIImageResizingModeTile平鋪 UIImageResizingModeStretch拉伸
[image resizableImageWithCapInsets:UIEdgeInsetsMake(imageheight * 0.5, imagewidth * 0.5, imageheight * 0.5 -1, imagewidth * 0.5 - 1) resizingMode:UIImageResizingModeTile];

傳入的第一個參數(shù)capInsetsUIEdgeInsets類型的數(shù)據(jù): UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)
這個參數(shù)是一個結(jié)構(gòu)體,定義如下
typedef struct { CGFloat top, left , bottom, right ; } UIEdgeInsets;
該參數(shù)的意思是被保護(hù)的區(qū)域到原始圖像外輪廓的上部,左部,底部,右部的直線距離
比如 UIEdgeInsetsMake(42, 0, 0, 0) 指的是拉伸區(qū),詳細(xì)點解釋就是,從頂部一直到y(tǒng)=42部分是保護(hù)區(qū),從y=42一直到底部是拉伸區(qū)

image.png

image.png

對于拉伸的方式,有以下兩種:

typedef NS_ENUM(NSInteger, UIImageResizingMode) {
UIImageResizingModeTile,(瓦片)
UIImageResizingModeStretch,(伸展)
 };
  • IUIImageResizingModeStretch:拉伸模式,通過拉伸UIEdgeInsets指定的矩形區(qū)域來填充圖片
  • UIImageResizingModeTile:平鋪模式(瓦片),通過重復(fù)顯示UIEdgeInsets指定的矩形區(qū)域來填充圖片
     
    來做四個測試,假如我們的原始圖像尺寸為60*128
    原始圖像

     
    在一個 180 * 384 的窗口進(jìn)行測試圖像
     
    測試的界面設(shè)計如圖
    正上方為原始圖像窗口,用于顯示原始圖像的效果
    左下方為測試圖像窗口,用于顯示測試狀況的效果
    右下方為對比圖像窗口,用于顯示默認(rèn)狀況的效果
    測試軟件的界面設(shè)計

     
    當(dāng)我們設(shè)置capInsets為以下四種值的時候有什么樣子的效果:
  • 1:capInsets參數(shù)為UIEdgeInsetsMake(0, 0, 0, 0)
  • 2:capInsets參數(shù)為UIEdgeInsetsMake(42, 0, 0, 0)
  • 3:capInsets參數(shù)為UIEdgeInsetsMake(0, 20, 0, 0)
  • 4:capInsets參數(shù)為UIEdgeInsetsMake(42, 20, 42, 20)

拉伸模式

resizingMode參數(shù)為UIImageResizingModeStretch

1.capInsets參數(shù)為UIEdgeInsetsMake(0, 0, 0, 0)時

當(dāng)我們向拉伸方法傳入該組參數(shù)時,代表我們未對原始圖像的任何區(qū)域進(jìn)行保護(hù).其拉伸效果如圖
在該種情況下,我們發(fā)現(xiàn)原始圖像按比例放大了3倍,因此我們將該情況當(dāng)做拉伸模式下的默認(rèn)狀況
 在之后的實驗中,我們將該種狀況當(dāng)做參考對象,顯示在界面的右下角

Stretch實驗結(jié)果1.png

2.capInsets參數(shù)為UIEdgeInsetsMake(42, 0, 0, 0)時

當(dāng)我們向拉伸方法傳入該組參數(shù)時,代表我們對原始圖像上部的三分之一進(jìn)行保護(hù)(即紅色方塊區(qū)域).其拉伸效果如圖
在該種情況下,我們可以發(fā)現(xiàn)拉伸后的圖像中:

  • 原始圖像中受保護(hù)的區(qū)域(即紅色方塊區(qū)域)在Y軸方向保持了原比例,但在X軸方向進(jìn)行了拉伸
  • 原始圖像中未受保護(hù)的區(qū)域,直接按比例進(jìn)行了拉伸


    Stretch實驗結(jié)果2.png

3.capInsets參數(shù)為UIEdgeInsetsMake(0,20, 0, 0)時

當(dāng)我們向拉伸方法傳入該組參數(shù)時,代表我們對原始圖像左部的三分之一進(jìn)行保護(hù)(即紅色方塊區(qū)域).其拉伸效果如圖
在該種情況下,我們可以發(fā)現(xiàn)拉伸后的圖像中:

  • 原始圖像中受保護(hù)的區(qū)域(即紅色方塊區(qū)域)在X軸方向保持了原比例,但在Y軸方向進(jìn)行了拉伸
  • 原始圖像中未受保護(hù)的區(qū)域,直接按比例進(jìn)行了拉伸


    Stretch實驗結(jié)果3.png

4.capInsets參數(shù)為UIEdgeInsetsMake(42, 20, 42, 20)時

當(dāng)我們向拉伸方法傳入該組參數(shù)時,代表我們對原始圖像除數(shù)字5以外的區(qū)域進(jìn)行保護(hù)(即兩個紅色方塊圍起來的區(qū)域).其拉伸效果如圖
在該種情況下,我們可以發(fā)現(xiàn)拉伸后的圖像中:

  • 在X軸上,由于1被左邊和上邊的設(shè)置保護(hù),3被右邊和上邊的設(shè)置保護(hù),所以只能用中間的2來拉伸,同理最底下的7,8,9
  • 在Y軸上,由于1被左邊和上邊的設(shè)置保護(hù),7被左邊和下邊的設(shè)置保護(hù),所以只能用中間的4來拉伸,同理最底下的3,6,9
  • 由于5沒有被保護(hù),所以在整個剩余的空間中,用5進(jìn)行拉伸填充


    Stretch實驗結(jié)果4.png

選擇平鋪模式

resizingMode參數(shù)為UIImageResizingModeTile

1.capInsets參數(shù)為UIEdgeInsetsMake(0, 0, 0, 0)時

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

Tile測試1.png

2.capInsets參數(shù)為UIEdgeInsetsMake(42, 0, 0, 0)時

當(dāng)我們向拉伸方法傳入該組參數(shù)時,代表我們對原始圖像上部的三分之一進(jìn)行保護(hù)(即紅色方塊區(qū)域).其平鋪效果如圖
在該種情況下,我們可以發(fā)現(xiàn)拉伸后的圖像中:

  • 原始圖像中受保護(hù)的區(qū)域(即紅色方塊區(qū)域)在Y軸方向保持了原比例,但在X軸方向進(jìn)行了平鋪填充
  • 原始圖像中未受保護(hù)的區(qū)域,直接按比例進(jìn)行了平鋪,但不包含被保護(hù)的區(qū)域(注意觀察藍(lán)色箭頭所指的區(qū)域)


    Tile測試2.png

3.capInsets參數(shù)為UIEdgeInsetsMake(0,20, 0, 0)時

當(dāng)我們向拉伸方法傳入該組參數(shù)時,代表我們對原始圖像左部的三分之一進(jìn)行保護(hù)(即紅色方塊區(qū)域).其平鋪效果如圖4.2.3
在該種情況下,我們可以發(fā)現(xiàn)拉伸后的圖像中:

  • 原始圖像中受保護(hù)的區(qū)域(即紅色方塊區(qū)域)在X軸方向保持了原比例,但在Y軸方向進(jìn)行了平鋪填充
  • 原始圖像中未受保護(hù)的區(qū)域,直接按比例進(jìn)行了平鋪,但不包含被保護(hù)的區(qū)域(注意觀察藍(lán)色箭頭所指的區(qū)域)
     


    Tile測試3.png

4.capInsets參數(shù)為UIEdgeInsetsMake(42, 20, 42, 20)時

當(dāng)我們向拉伸方法傳入該組參數(shù)時,代表我們對原始圖像除數(shù)字5以外的區(qū)域進(jìn)行保護(hù)(即兩個紅色方塊圍起來的區(qū)域).其拉伸效果如圖
在該種情況下,我們可以發(fā)現(xiàn)拉伸后的圖像中:

  • 在X軸上,由于1被左邊和上邊的設(shè)置保護(hù),3被右邊和上邊的設(shè)置保護(hù),所以只能用中間的2來平鋪,同理最底下的7,8,9
  • 在Y軸上,由于1被左邊和上邊的設(shè)置保護(hù),7被左邊和下邊的設(shè)置保護(hù),所以只能用中間的4來平鋪,同理最底下的3,6,9
  • 由于5沒有被保護(hù),所以在整個剩余的空間中,用5進(jìn)行平鋪填充


    Tile測試4.png

結(jié)論和建議

通過8組實驗數(shù)據(jù)可以觀察出拉伸方法在平鋪模式和拉伸模式下的變化過程和主要區(qū)別,由此我們可知:

  • 對原始圖形使用拉伸方法且在四周增加保護(hù)區(qū)域后,能保證原始圖形的四個角不失真,但其余部分的變化細(xì)節(jié)則有不同
  • 如果原始圖像的外輪廓不平整的話,使用拉伸方式會讓外輪廓的不平整度放大,使用平鋪方式應(yīng)該能減小這種情況

測試代碼:

使用了Storyboard搭建軟件界面

 #import "ViewController.h"
 
 @interface ViewController ()
 @property (weak, nonatomic) IBOutlet UIImageView *imageView1;
 @property (weak, nonatomic) IBOutlet UIImageView *imageView2;
 @property (weak, nonatomic) IBOutlet UIImageView *imageView3;
 @end
 
 @implementation ViewController
 
 - (void)viewDidLoad {
 [super viewDidLoad];
 
 //--imageView1的相關(guān)內(nèi)容------------------------------------------------------------------------------------
 
 //相框大小為60 * 128    圖片尺寸為60 * 128
 //讀取圖片
 UIImage *testImage1 = [UIImage imageNamed:@"123456789"];
 
 testImage1 = [testImage1 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch];
 self.imageView1.image = testImage1;
 
 //---imageView2的相關(guān)內(nèi)容-----------------------------------------------------------------------------------
 
 //相框為180 * 384    圖片尺寸為60 * 128    相框大小為原始圖片的3倍
 //讀取圖片
 UIImage *testImage2 = [UIImage imageNamed:@"123456789"];
 /***********************************************/
 //方法1 resizableImageWithCapInsets:默認(rèn)是平鋪
 //方法2 resizableImageWithCapInsets: resizingMode: 方法
 //  UIImageResizingModeTile,     平鋪
 //平鋪的概念是保證原圖像大小不變,將新圖像填充滿
 //testImage2 = [testImage2 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeTile];
 
 //將上部的三分之一"保護(hù)",然后進(jìn)行顯示
 //這代表新圖像中,上部的三分之一和原圖像一樣,而其余部分的填充不會使用原圖像上部的三分之一
 // testImage2 = [testImage2 resizableImageWithCapInsets:UIEdgeInsetsMake(42, 0, 0, 0) resizingMode:UIImageResizingModeTile];
 
 //將左部的三分之一"保護(hù)",然后進(jìn)行顯示
 //這代表新圖像中,上部的三分之一和原圖像一樣,而其余部分的填充不會使用原圖像上部的三分之一
 // testImage2 = [testImage2 resizableImageWithCapInsets:UIEdgeInsetsMake(0,20, 0, 0) resizingMode:UIImageResizingModeTile];
 
 //將四周進(jìn)行保護(hù)后
 //在X軸上,由于1被左邊的設(shè)置保護(hù),3被右邊的設(shè)置保護(hù),所以中間只能用2來平鋪,同理,7和9之間的8
 //在Y軸上,由于1被上邊的設(shè)置保護(hù),7被下邊的設(shè)置保護(hù),所以中間只能用4來平鋪,同理,3和9之間的6
 //由于5沒有被保護(hù),所以在整個空間中,用5進(jìn)行平鋪來填充剩余的區(qū)域
 // testImage2 = [testImage2 resizableImageWithCapInsets:UIEdgeInsetsMake(42, 20, 42, 20) resizingMode:UIImageResizingModeTile];
 
 /***********************************************/
 //resizableImageWithCapInsets: resizingMode: 方法
 //  UIImageResizingModeStretch,  拉伸
 //  拉伸的概念是直接按比例將圖片放大到與相框尺寸相同的圖像,
 //testImage2 = [testImage2 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch];
 
 //將上部的三分之一"保護(hù)",然后進(jìn)行顯示
 //保證原圖像上部的三分之一在Y軸上不被拉伸,其余部分按剩余比例拉伸
 //testImage2 = [testImage2 resizableImageWithCapInsets:UIEdgeInsetsMake(42, 0, 0, 0) resizingMode:UIImageResizingModeStretch];
 
 //將左部的三分之一"保護(hù)",然后進(jìn)行顯示
 //保證原圖像左部的三分之一在Y軸上不被拉伸,其余部分按剩余比例拉伸
 //testImage2 = [testImage2 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20, 0, 0) resizingMode:UIImageResizingModeStretch];
 
 //將四周進(jìn)行保護(hù)后
 //在X軸上,由于1被左邊的設(shè)置保護(hù),3被右邊的設(shè)置保護(hù),所以中間只能用2來拉伸,同理,7和9之間的8
 //在Y軸上,由于1被上邊的設(shè)置保護(hù),7被下邊的設(shè)置保護(hù),所以中間只能用4來拉伸,同理,3和9之間的6
 //由于5沒有被保護(hù),所以在整個空間中,用5進(jìn)行拉伸來填充剩余的區(qū)域
 //testImage2 = [testImage2 resizableImageWithCapInsets:UIEdgeInsetsMake(42, 20, 42, 20) resizingMode:UIImageResizingModeStretch];
 
 //將圖片添加到相框
 self.imageView2.image = testImage2;
 
 //-----imageView3的相關(guān)內(nèi)容----------------------------------------------------------------------------------
 
 //讀取圖片
 UIImage *testImage3 = [UIImage imageNamed:@"123456789"];
 
 /***********************************************/
 //resizableImageWithCapInsets默認(rèn)是平鋪
 //resizableImageWithCapInsets默認(rèn)情況對比圖
 //testImage3 = [testImage3 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeTile];
 
 /***********************************************/
 //resizableImageWithCapInsets: resizingMode: 方法
 //  UIImageResizingModeTile,     平鋪 (已經(jīng)測試過了,)
 //  UIImageResizingModeStretch,  拉伸
 //testImage3 = [testImage3 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch];
 /***********************************************/
 
 //將圖片添加到相框
 self.imageView3.image = testImage3;
 // Do any additional setup after loading the view, typically from a nib.
 }
 
 @end

方法三:

Image Slicing 可視化縮放
相當(dāng)于一個可視化的resizableImageWithCapInsets,可以用于指定在圖片縮放時用來填充的像素。我們可以在XcodeAssets.xcassets目錄中選擇要slicing的圖片,點擊圖片界面右下方的Show Slicing按鈕,在想要設(shè)定切片的圖片上點擊Start Slicing,將出現(xiàn)左中右(或者上中下)三條可以拖動的指示線,通過拖動它們來設(shè)定實際的縮放范圍。
 
他是可視化的resizableImageWithCapInsets,那么它的capInsets在哪里呢?打開圖片對應(yīng)的.json文件,代碼如下:

 {
 "images" : [
 {
 "resizing" : {
 "mode" : "9-part",
 "center" : {
 "mode" : "tile",
 "width" : 42,
 "height" : 92
 },
 "cap-insets" : {
 "bottom" : 0,
 "top" : 95,
 "right" : 41,
 "left" : 0
 }
 },

從文件可以看出來top、left、bottomright對應(yīng)的就是上左下右的指示線,看到modetile,就知道Image Slicing默認(rèn)為平鋪縮放,對于widthHeight是做什么的呢?Width代表的是左側(cè)線(或者上方線)和中間線之間的區(qū)域,Height代表的是上側(cè)線和中間線之間的區(qū)域。
 
做個測試:

image.png

這是一張2倍像素的圖片,我把它拖入Assets.xcassets中。選擇右下角Slices的類型為Horizontal and Vertical
image.png

左側(cè)ShowSlicing顯示如下:
image.png

 
storyboard拖入一個ImageView,上下左右距離邊框均為20。則顯示如下:
image.png

 
 
簡單來記就是縱橫各三條線,線之外的四個角不會拉伸。六條線內(nèi)部交匯處,亮色區(qū)域為拉伸區(qū)域,灰色蒙版區(qū)域被截取掉,不顯示。
Snip20171122_5.png

 
 
如果在Xib或者StoryBoard中可以通過View 的Stretching屬性來設(shè)置。
image.png

UIEdgeInsetsMake使用例子

在創(chuàng)建button的時候經(jīng)常需要在button上添加圖片和按鈕,而且一般情況下我們需要的都是圖片在上、標(biāo)題在下的效果(灰色的為button):

image.png

而當(dāng)我們設(shè)置好title和image后發(fā)現(xiàn)是圖片居左,標(biāo)題居右的:
image.png

 
當(dāng)然這不是我們想要的效果,于是通過設(shè)置UIEdgeInsetsMake屬性來達(dá)到我們想要的效果

 typedef struct UIEdgeInsets {
 CGFloat top, left, bottom, right; // specify amount to inset (positive) for each of the edges. values can be negative to 'outset'
 } UIEdgeInsets;

UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)要設(shè)置的就是四個邊距

image.png

 
圖中,藍(lán)色標(biāo)識為可變區(qū)域, 綠色標(biāo)識為不變區(qū)域。
上面的圖片來自于一葉博客
可以這樣理解:top就是距離頂部的距離在默認(rèn)的基礎(chǔ)上又加上設(shè)置的距離,拿開頭的button來說,在button僅設(shè)置image的時候(如果同時設(shè)置了image和title效果又是不一樣的,下面會詳解,稍安勿躁),image默認(rèn)是居中的,相當(dāng)于進(jìn)行了這樣的設(shè)置:

 [button setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

如果我們在這個時候設(shè)置了:

 [button setImageEdgeInsets:UIEdgeInsetsMake(20, 0, 0, 0)];

就相當(dāng)于在圖片居中的基礎(chǔ)上,將圖片又下移了20,如果是-20則是在原有的基礎(chǔ)上向上移20,其他幾個參數(shù)同理,正數(shù)就是距相應(yīng)的邊的距離增加,負(fù)數(shù)就是距相應(yīng)的距離減少。

為button同時設(shè)置圖片和標(biāo)題

當(dāng)我們給button設(shè)置圖片和title的時候默認(rèn)是圖片居左,標(biāo)題距右并排排列的
當(dāng)我們同時添加圖片和標(biāo)題時,圖片默認(rèn)會向左偏移button的titleLabel的寬度,而標(biāo)題會向右偏移圖片的寬度,既然如此,我們就可以設(shè)置偏移量來達(dá)到我們想要的任何效果

 [button setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -button.titleLabel.intrinsicContentSize.width)];
 [button setTitleEdgeInsets:UIEdgeInsetsMake(0, -button.currentImage.size.width, 0, 0)];

image.png

設(shè)置image偏移量的時候并不是設(shè)置的-button.titleLabel.bounds.size.width,而是-button.titleLabel.intrinsicContentSize.width,因為在iOS8之后-button.titleLabel.bounds.size.width的值為0,經(jīng)多方搜索才找到一個替代的方法,這樣設(shè)置的意義就是將image的偏移量距右邊的距離減少了titleLabel的寬度,由于默認(rèn)是向左便宜了這么多,我們這樣設(shè)置之后相當(dāng)于抵消了左移的偏移量,所以圖片就居中了,對于title道理是一樣的。這一點明白之后剩下的就沒什么難題了,繼續(xù),title下移,image上移:
 [button setImageEdgeInsets:UIEdgeInsetsMake(-button.titleLabel.intrinsicContentSize.height, 0, 0, -button.titleLabel.intrinsicContentSize.width)];  [button setTitleEdgeInsets:UIEdgeInsetsMake(button.currentImage.size.height, -button.currentImage.size.width, 0, 0)];
image.png

圖片和標(biāo)題好像有點近,好辦,再加一點:

 [button setTitleEdgeInsets:UIEdgeInsetsMake(button.currentImage.size.height + 20, -button.currentImage.size.width, 0, 0)];
image.png

代碼:

 UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 160, 160)];
 [button setImage:[UIImage imageNamed:@"ffw_32"] forState:UIControlStateNormal];
 [button setTitle:@"按鈕" forState:UIControlStateNormal];
 button.titleLabel.font = [UIFont systemFontOfSize:14];
 [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
 button.center = self.view.center;
 button.backgroundColor = [UIColor grayColor];
 [self.view addSubview:button];
 NSLog(@"%f",-button.titleLabel.bounds.size.width);
 
 
 [button setImageEdgeInsets:UIEdgeInsetsMake(-button.titleLabel.intrinsicContentSize.height, 0, 0, -button.titleLabel.intrinsicContentSize.width)];
 [button setTitleEdgeInsets:UIEdgeInsetsMake(button.currentImage.size.height + 20, -button.currentImage.size.width, 0, 0)];

例子:在代碼中使用UIProgressView 設(shè)置了Progress Image和Track Image沒能正常的工作

Progress Image:



 
Track Image:



 
效果圖:

 
解決方法:
新建個子類繼承UIProgressView,并添加兩個屬性分別是:

 @property (nonatomic,strong)UIImage *ggTrackImage;
 @property (nonatomic,strong)UIImage *ggProgressImage;

分別在set方法里對UIProgressView自帶的trackImage,和ProgressImge進(jìn)行賦值,因為iOS的bug就不能直接拿到屬性進(jìn)行賦值了,取出UIProgressViewSubViews,并根據(jù)自己的需求對圖片進(jìn)行拉伸,我這里選擇的是平滑拉伸,代碼如下:

 -(void)setGgTrackImage:(UIImage *)ggTrackImage
 {
 _ggTrackImage=ggTrackImage;
 UIImageView *trackImageView=self.subviews.firstObject;
 CGRect trackProgressFrame=trackImageView.frame;
 trackProgressFrame.size.height=self.frame.size.height;
 trackImageView.frame=trackProgressFrame;
 CGFloat width = _ggTrackImage.size.width/2.0;
 CGFloat height = _ggTrackImage.size.height/2.0;
 UIImage *imgTrack = [_ggTrackImage resizableImageWithCapInsets:UIEdgeInsetsMake(height, width, height, width)];
 trackImageView.image=imgTrack;
 }
 
 -(void)setGgProgressImage:(UIImage *)ggProgressImage
 {
 _ggProgressImage=ggProgressImage;
 CGFloat width = _ggProgressImage.size.width/2.0;
 CGFloat height = _ggProgressImage.size.height/2.0;
 UIImageView *progressImageView=self.subviews.lastObject;
 CGRect ProgressFrame=progressImageView.frame;
 ProgressFrame.size.height=self.frame.size.height;
 progressImageView.frame=ProgressFrame;
 UIImage *imgProgress = [_ggProgressImage resizableImageWithCapInsets:UIEdgeInsetsMake(height, width, height, width)];progressImageView.image=imgProgress;
 }

搞定,將這個類導(dǎo)入其他使用直接進(jìn)行圖片賦值即可

參考博客:

http://www.lxweimin.com/p/3907e6116f41
http://www.lxweimin.com/p/af2d471f7b9c
http://www.lxweimin.com/p/a577023677c1
http://www.lxweimin.com/p/4e4801cbda2b
http://www.lxweimin.com/p/901f9b98f7c2
http://www.lxweimin.com/p/0d3dbc30fad5

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

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