第一种、stretchableImageWithLeftCapWidth: topCapHeight:函数是UIImage的一个实例函数,它可以创建一个内容可拉伸,而边角不拉伸的图片,这需要两个参数来实现这个功能,第一个参数是左边不拉伸区域的宽度,第二个参数是上面不拉伸的高度。
例如:30是左边距的大小,10是上边距的大小(也可以理解为像素大小)
- (UIImage *)getButtonNormalBgImage {
UIImage *newImage = [[UIImage imageNamed:@"btn_normal.png"] stretchableImageWithLeftCapWidth:30
topCapHeight:10];
return newImage;
}
其中,可拉伸的范围都是距离leftCapWidth后的1竖排像素,和距离topCapHeight后的1横排像素。这里参数的意义是,图片左边距30个像素和上边距10个像素范围内不会被拉伸,而左边距第31个像素会被横向复制,上边距的第11个像素会被纵向复制。复制是根据控件本身的大小对这一个像素进行复制到一定宽度,而图片左边距31像素后面以及上边距11像素后的剩余像素也不会被拉伸。
第二种、resizableImageWithCapInsets: resizingMode: 函数也是UIImage的一个实力函数,它也可以实现图片不变形功能。第一个参数是UIEdgeInsets内边距的距离,第二个参数是个枚举类型UIImageResizingMode
typedef NS_ENUM(NSInteger, UIImageResizingMode) {
UIImageResizingModeTile,//拉伸模式,通过拉伸UIEdgeInsets指定的矩形区域来填充图片
UIImageResizingModeStretch,//平铺模式,通过重复显示UIEdgeInsets指定的矩形区域来填充图片
};
具体的使用如下:
- (UIImage *)getButtonHighlightBgImage {
UIImage *newImage = [[UIImage imageNamed:@"btn_pressed.png"]
resizableImageWithCapInsets:UIEdgeInsetsMake(10.f, 30.f, 10.f, 30.f) resizingMode:
(UIImageResizingModeStretch)];
return newImage;
}
效果图:
设置UIButton背景图片,图片被严重拉伸变形
在代码中使用此方法设置UIButton背景图运行效果