如果不采用相应技术对button的背景图片进行拉伸,则显示的效果就会失真,效果:
Snip0823_7.png
iOS中有三种方法对图片进行拉伸
// 方法一:
- (void)viewDidLoad {
[super viewDidLoad];
// 0.创建一张图片
UIImage *image = [UIImage imageNamed:@"chat_send_nor"];
// 1.获取图片尺寸
CGFloat width = image.size.width;
CGFloat height = image.size.height;
// 2.拉伸图片
UIImage *resizableImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(height * 0.5, width * 0.5, height * 0.5 - 1, width * 0.5 - 1)];
// 3.把拉伸过的图片设置为button的背景图片
[self.buttonView setBackgroundImage:resizableImage forState:UIControlStateNormal];
}
// 方法二
- (void)viewDidLoad {
[super viewDidLoad];
// 0.创建一张图片
UIImage *image = [UIImage imageNamed:@"chat_send_nor"];
// 1.获取图片尺寸
CGFloat width = image.size.width;
CGFloat height = image.size.height;
// 2.拉伸图片
UIImage *resizableImage = [image stretchableImageWithLeftCapWidth:width * 0.5 topCapHeight:height * 0.5];
// 3.把拉伸过的图片设置为button的背景图片
[self.buttonView setBackgroundImage:resizableImage forState:UIControlStateNormal];
}
方法三
在storyboard中进行设置
Snip0823_8.png
Snip0823_9.png
Snip0823_12.png
注意:由于storyboard的图片拉伸往往不能处理一些特殊形状的图片,所以还需要用上面两种代码拉伸图片的方法
由于经常需要用到代码拉伸图片的功能,所以我们可以写一个分类,可以方便以后直接使用
构造一个类方法
Snip0823_13.png
#import "UIImage+LHLExtension.h"
@implementation UIImage (LHLExtension)
+ (instancetype)stretchableImageWithLocalName:(NSString *)imageName{
// 0.创建一张图片
UIImage *image = [UIImage imageNamed:imageName];
// 1.获取图片尺寸
CGFloat width = image.size.width;
CGFloat height = image.size.height;
// 2.拉伸图片
UIImage *resizableImage = [image stretchableImageWithLeftCapWidth:width * 0.5 topCapHeight:height * 0.5];
return resizableImage;
}
@end
然后在viewDidLoad中用分类中的方法
UIImage *image = [UIImage stretchableImageWithLocalName:@"chat_send_nor"];
[self.buttonView setBackgroundImage:image forState:UIControlStateNormal];
}
以上三种方式处理后的图片效果如下:
Snip0823_14.png