拉伸图片的4种方法

为什么要拉伸图片呢? 有时候我们一个视图的大小是不固定的,它可能根据内容的不同展示不同的尺寸,但是希望图片可以只拉伸里面而保持四周不变.比如聊天的气泡:

聊天界面的气泡

这里给介绍4个拉伸图片的方法:

方法一:

resizableImageWithCapInsets: resizingMode:

  • 是UIImage实例调用的方法,返回拉伸后的image
  • capInsets参数表示图片上下左右分别要保护的宽度或者高度(保持不变的边距),没被保护的地方会进行拉伸
  • resizingMode表示拉伸的部位是以何种方式显示,有平铺和拉伸两种选择

方法二:

stretchableImageWithLeftCapWidth: topCapHeight:

  • 也是UIImage实例调用的方法,返回拉伸后的image
  • 两个个参数分别表示要左边和上边被保护起来(不会变形)的宽度和高度
  • 使用这个方法只会拉伸一个像素点,设置左边和上边的包括宽高后,右边和下边的保护宽高分别是:
    right = width - left - 1,
    bottom = height - top - 1,
    所以其实拉伸的只有中间一个像素点

方法三:

  • 3 在.xcassets文件里面对单独的图片进行设置
    找到:
    图片设置拉伸1

设置后变成:

图片设置拉伸2

只要选择了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"];

是不是用起来跟原生的一样?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容