为什么要拉伸图片呢? 有时候我们一个视图的大小是不固定的,它可能根据内容的不同展示不同的尺寸,但是希望图片可以只拉伸里面而保持四周不变.比如聊天的气泡:
聊天界面的气泡
这里给介绍4个拉伸图片的方法:
方法一:
resizableImageWithCapInsets: resizingMode:
是UIImage实例调用的方法,返回拉伸后的image
capInsets参数表示图片上下左右分别要保护的宽度或者高度(保持不变的边距),没被保护的地方会进行拉伸
resizingMode表示拉伸的部位是以何种方式显示,有平铺和拉伸两种选择
方法二:
stretchableImageWithLeftCapWidth: topCapHeight:
也是UIImage实例调用的方法,返回拉伸后的image
两个个参数分别表示要左边和上边被保护起来(不会变形)的宽度和高度
使用这个方法只会拉伸一个像素点,设置左边和上边的包括宽高后,右边和下边的保护宽高分别是:right = width - left - 1,bottom = height - top - 1,所以其实拉伸的只有中间一个像素点
方法三:
3 在.xcassets文件里面对单独的图片进行设置找到:
设置后变成:
只要选择了horizontal and Vertical,xcode就会自动算出应该保护的宽高,不用在代码里面做任何设置
补充一点: 如果图片有两种规格以上的图片(如:既有@1x图也有@2x图),那么所有规格的图片都需要这样设置一次.但其实如果要对图片进行拉伸使用,只要准备一张图片就够了.(20150731补充)
方法四: 给项目增加一个UIImage的分类
添加UIImage的分类其实和上面第一种方法是一样的,只是这里我们把它单独放在一个文件里面.分类实现:
- (UIImage *)resizableImageNamed:(NSString *)imageName { UIImage *image = [UIImage imageNamed:imageName]; return [image stretchableImageWithLeftCapWidth:image.size.width / 2.0 topCapHeight:image.size.height / 2.0];}
这样,在设置需要拉伸的图片的时候,只要使用
xxxImage = [UIImage resizableImageNamed:@"xxx"];
是不是用起来跟原生的一样?