iOS 图片拉伸技
1、直接拉伸法
简单暴力,却是最最常用的方法,直接将图片设置为ImageView的image属性,图片便会随UIImageView对象的大小做自动拉伸。这种拉伸的方法有一个致命的缺陷,它会使图像发生失真与形变。
2、像素点的拉伸
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;
这个函数我们可以用来拉伸类似QQ,微信的聊天气泡背景图,它的两个参数分别leftCapWidth和topCapHeight,这两个参数给定一个坐标,比如:
UIImage * img= [UIImage imageNamed:@"11.png"];
img = [img stretchableImageWithLeftCapWidth:1 topCapHeight:1];
这段代码的意思是将图片从左起第2列,上起第2行,坐标为(2,2)的像素点进行复制。将图片进行拉伸。这个方法和上面的方法比起来似乎灵活性更多了,但其也有它的一些局限,如果被拉伸的图片中间也有需要拉伸的像素,这个方法就无能为力了,例如,如下的一张图片,我们需要将其拉伸放大:
便会出现这样的效果:
这明显和我们的意图是不符的,那么,我们可以使用下面的方法
3、区域的拉伸
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets;
这个函数需要设置一个UIEdgeInsets参数,UIEdgeInsets结构体如下:
typedef struct UIEdgeInsets {
CGFloat top, left, bottom, right;
} UIEdgeInsets;
它分别对用了图片进行拉伸的区域距离顶部、左部、下部、右部的像素。比如,一个1010像素的图片,将UIEdgeInsets参数全部设置为1,则实际拉伸的部分就是中间的88的区域的像素。有一点需要注意,这个方法默认使用的拉伸模式是区域复制,比如还是上面的图案,如下代码拉伸:
UIImage * img= [UIImage imageNamed:@"11.png"];
img = [img resizableImageWithCapInsets:UIEdgeInsetsMake(1, 1, 1, 1)];
来看一下效果:
网友评论