通常一个项目里,有很多按钮样式是一样的,但是长度是不一样的,如果直接对按钮的UIImage进行frame的调整,拉伸,图片就变形了。变得很难看。
iOS提供了2个方法,一个是旧版本的已经不用了stretchableImageWithLeftCapWidth:topCapHeight
我用的是resizableImageWithCapInsets,这个方法得至少在ios5系统下才能用
该方法提供一个参数,是UIEdgeInsets,可以使用UIEdgeInsetsMake宏创建
typedef struct {
CGFloat top, left, bottom, right;
} UIEdgeInsets;
这个结构定义了4个值,分别是4个边的偏移值
比如说 (4,10,4,10) 的话,就定义了一个区域,那个区域的上边距离图片上边4 point,距离左边10 point,距离底边 4 point,距离右边 10point
这个区域在图片被拉伸的时候,会重复填充相应的区域。
例如这个按钮:
如果直接设置长度的话,就变成这个样子了,变形了
但是如果截取中间一个区域来填充拉伸的区域
这个区域的话,效果就会变成这样
UIEdgeInsets inset = UIEdgeInsetsMake(0, image.size.width/2-10, 0, image.size.width/2-10);
[registerBtn setBackgroundImage:[image resizableImageWithCapInsets:inset ] forState:UIControlStateNormal];
[registerBtn setBackgroundImage:[imageSelected resizableImageWithCapInsets:inset ] forState:UIControlStateSelected];
这个代码选取了正中间20point的区域作为填充的区域产生了上图的效果