[转]带边框的UIImage缩放(类似Android的九宫格)

转载前言:在Android中,有.9的图片可以用于处理拉伸问题,这个大家都很熟悉了,iOS中,不仅xCode的IB可以这么搞,代码中也可以很方便的实现这个功能。

转载自:https://onevcat.com/2011/12/uiimage/

一个带边框的UIImage如果使用常规的缩放,边框部分将被按照缩放比例拉伸或压缩,有些时候这并不是我们所期望的..比如这个边框是根据图片大小变化的外框。比如下面的类似按钮的不明物体图片:主体为渐变蓝色,边框为外圈白色,灰色底板为背景。

常见的按钮添加和背景设置如下:

所得到的按钮会相当悲剧…

边框,特别是左右边框由于按钮frame过大被惨烈拉伸… iOS5中提供了一个新的UIImage方法,resizableImageWithCapInsets:,可以将图片转换为以某一偏移值为偏移的可伸缩图像(偏移值内的图像将不被拉伸或压缩)。

用法引述如下:

输入参数为一个capInsets结构体:

分别表示上左下右四个方向的偏移量。于是把上面按钮的UIImage改为如下形式:

可以得到如下按钮:

问题得到解决。

但是值得注意的是该方法需要至少iOS5的运行环境,因此对于需要开发支持iOS5之前的App来说是不可行的。替代方案是stretchableImageWithLeftCapWidth:topCapHeight:,但是在iOS5中,这已经是被Deprecated的方法了,而且该方法只能以1px作为重复铺满拉伸区域,无法做到类似渐变等图片效果,是存在一定局限的。

Leave a Reply

Your email address will not be published.