社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
作者:刘新林
转载请标明出处:http://blog.csdn.net/loving_ios/article/details/52460627
UIImage *image = [UIImage imageNamed:@"pao"];
NSLog(@"%lf %lf", image.size.width, image.size.height);
UIImageView *img_test = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 96, 96)];
img_test.image = image;
[self.view addSubview:img_test];
UIImage *image = [UIImage imageNamed:@"pao"];
UIImageView *img_test = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 96, 96)];
[self.view addSubview:img_test];
// 通过实例方法 stretchableImageWithLeftCapWidth: topCapHeight: 来拉伸
img_test.image = [image stretchableImageWithLeftCapWidth:16 topCapHeight:32];
这段代码的意思是将图片从坐标为(17,33)的像素点将图片进行拉伸。该方法也有一个缺陷,那就是如果图片内部也有被拉伸的的地方就不行了。比如下面这张图片,
就图片进行拉伸处理
UIImage *image = [UIImage imageNamed:@"tupian"];
UIImageView *img_test = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 96, 96)];
[self.view addSubview:img_test];
img_test.image = [image stretchableImageWithLeftCapWidth:5 topCapHeight:5];
会得到下面这张图
原因很简单,因为只是对一个像素(6,6)进行横向和纵向拉伸,而内部的线条不在该像素内所以很出现该现象,这是这种方式的缺陷。
它分别对用了图片进行拉伸的区域距离顶部、左部、下部、右部的像素。比如,一个32*32像素的图片,将UIEdgeInsets参数全部设置为1,则实际拉伸的部分就是中间的30*30的区域的像素。有一点需要注意,这个方法默认使用的拉伸模式是区域复制,比如还是上面的图案,如下代码拉伸:
UIImage *image = [UIImage imageNamed:@"tupian"];
UIImageView *img_test = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 96, 96)];
[self.view addSubview:img_test];
img_test.image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(1, 1, 1, 1)];
得到的图片
很显然不符合要求,看下面的方法。
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode;
这个函数和上一个函数相比,唯一的差别是多了一个参数。这个参数是个枚举,如下
typedef NS_ENUM(NSInteger, UIImageResizingMode) {
UIImageResizingModeTile,//进行区域复制模式拉伸 如上
UIImageResizingModeStretch,//进行渐变复制模式拉伸
};
我们只需使用UIImageResizingModeStretch模式即可
UIImage *image = [UIImage imageNamed:@"tupian"];
UIImageView *img_test = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 96, 96)];
[self.view addSubview:img_test];
img_test.image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(1, 1, 1, 1) resizingMode:(UIImageResizingModeStretch)];
得到如下图:
在实际开发中会用到图片拉伸的地方很多,希望能有帮助。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!