iOS图片的拉伸

2016-06-06  本文已影响89人  coder_hong

一、iOS 5.0之前

使用UIImage的这个方法,可以通过设置端盖宽度返回一个经过拉伸处理的UIImage对象

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight; 

这个方法只有2个参数,leftCapWidth代表左端盖宽度,topCapHeight代表顶端盖高度。系统会自动计算出右端盖宽度(rightCapWidth)和底端盖高度(bottomCapHeight),算法如下

// width为图片宽度  
rightCapWidth = width - leftCapWidth - 1;  
// height为图片高度  
bottomCapHeight = height - topCapHeight - 1  

经过计算,你会发现中间的可拉伸区域只有1x1

// stretchWidth为中间可拉伸区域的宽度  
stretchWidth = width - leftCapWidth - rightCapWidth = 1;  
// stretchHeight为中间可拉伸区域的高度  
stretchHeight = height - topCapHeight - bottomCapHeight = 1; 

注意:这个方法的局限性
1.这个方法在iOS 5.0出来后就过期了
2.这个方法只能拉伸1x1的区域

二、iOS 5.0

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets  

这个方法只接收一个UIEdgeInsets类型的参数,可以通过设置UIEdgeInsets的left、right、top、bottom来分别指定左端盖宽度、右端盖宽度、顶端盖高度、底端盖高度

CGFloat top = 25; // 顶端盖高度  
CGFloat bottom = 25 ; // 底端盖高度  
CGFloat left = 10; // 左端盖宽度  
CGFloat right = 10; // 右端盖宽度  
UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right);  
// 伸缩后重新赋值  
image = [image resizableImageWithCapInsets:insets]; 

iOS 6.0

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

对比iOS5.0中的方法,只多了一个UIImageResizingMode参数,用来指定拉伸的模式:

CGFloat top = 25; // 顶端盖高度  
CGFloat bottom = 25 ; // 底端盖高度  
CGFloat left = 10; // 左端盖宽度  
CGFloat right = 10; // 右端盖宽度  
UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right);  
// 指定为拉伸模式,伸缩后重新赋值  
image = [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch];  
Snip20160606_6.png

X 代表:从X方向上那个位置开始拉伸 (取值范围0~1)
Y 代表:从Y方向上那个位置开始拉伸 (取值范围0~1)
width 代表X轴方向上拉伸多少像素(写0代表拉伸一像素)
height 代表Y轴方向上拉伸多少像素(写0代表拉伸一像素)

Snip20160606_11.png Snip20160606_12.png Snip20160606_13.png Snip20160606_8.png

注意:默认的拉伸方式是平铺 这里可以修改方式

Snip20160606_14.png
上一篇下一篇

猜你喜欢

热点阅读