一攻礼、圖片拉伸(用代碼來控制)
1团赁、常用的拉伸方式:
- 直接將圖片設置為ImageView的image屬性屋剑,也就是UIImageView的size有多大就顯示多大茵臭,但是這樣的缺點也是顯而易見的震叮,那就是圖片會在變形胧砰;
2、像素點的拉伸
- (UIImage*)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;
這個函數(shù)的最大作用好像就是針對那些聊天氣泡什么的苇瓣,它的兩個參數(shù)分別leftCapWidth和topCapHeight尉间,這兩個參數(shù)給定一個坐標,比如:
UIImage * img= [UIImage imageNamed:@"1.png"];
img = [img stretchableImageWithLeftCapWidth:1 topCapHeight:1];
這段代碼的意思是將圖片從左起第2個像素點击罪,上起第2個像素點哲嘲,坐標為(2,2)的像素點進行復制。將圖片進行拉伸(就是橫向的復制左起第二個像素點媳禁,縱向的父子上起的第二個像素點)眠副,但是也有一些地方也不行,例如你想一個如果被拉伸的圖片中間也有需要拉伸的像素竣稽,這個方法就無能為力了囱怕,例如,如下的一張圖片毫别,我們需要將其拉伸放大:
便會出現(xiàn)這樣的效果:
3娃弓、區(qū)域的拉伸
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets;
這個函數(shù)需要設置一個UIEdgeInsets參數(shù),UIEdgeInsets結構體如下:
typedef struct UIEdgeInsets {
CGFloat top, left, bottom, right;
} UIEdgeInsets;
它分別對用了圖片進行拉伸的區(qū)域距離頂部岛宦、左部台丛、下部、右部的像素砾肺。比如挽霉,一個1010像素的圖片,將UIEdgeInsets參數(shù)全部設置為1变汪,則實際拉伸的部分就是中間的88的區(qū)域的像素侠坎。有一點需要注意,這個方法默認使用的拉伸模式是區(qū)域復制疫衩,比如還是上面的圖案硅蹦,如下代碼拉伸:
UIImage * img= [UIImage imageNamed:@"1.png"];
img = [img resizableImageWithCapInsets:UIEdgeInsetsMake(1, 1, 1, 1)];
結果如下:
4荣德、拉伸模式的設置
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode;
這個函數(shù)和上一個函數(shù)相比,唯一的差別是多了一個參數(shù)童芹。這個參數(shù)是個枚舉涮瞻,如下:
typedef NS_ENUM(NSInteger, UIImageResizingMode) {
UIImageResizingModeTile,//進行區(qū)域復制模式拉伸
UIImageResizingModeStretch,//進行漸變復制模式拉伸
};
現(xiàn)在就明了了,我們只需要設置一下模式假褪,就可以實現(xiàn)漸變拉伸了:
UIImage * img= [UIImage imageNamed:@"11.png"];
img = [img resizableImageWithCapInsets:UIEdgeInsetsMake(1, 1, 1, 1) resizingMode:UIImageResizingModeStretch];
來看一下效果: