类似QQ聊天框那样,随着字体的增加,对应的背景Image也被拉扯,但是又不会失真。
系统提供了三个方法,这里保留最简单粗暴的一种。
实现方式就是通过取得Image的宽和高,然后调用resizableImageWithCapInsets方法。
代码如下:
UIImage * image = [UIImage imageNamed:@"1.jpg"];
CGFloat w = image.size.width * 0.5;
CGFloat h = image.size.height * 0.5;
UIImage * newImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(w, h, w, h)];
UIImageView * imageView = [[UIImageView alloc] initWithImage:newImage];
[self.view addSubview:imageView];
这样通过设置,再对imageView的frame进行调整。就不会把image整体拉大。
该方法会把设置的值外边的部分进行保留,然后用UIEdgeInsetsMake包围的部分填充其余位置。
也可以选用resizingMode参数,传入填充模式,有铺盖和拉伸两种。
在旧版本中还有一个stretchableImageWithLeftCapWidth方法。
它只需要传入两个参数,分别是左边距和上边距,然后系统自动会算出用于填充的范围。
综上,对image不失真的拉伸方式有以下三种:
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets NS_AVAILABLE_IOS(5_0);
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode NS_AVAILABLE_IOS(6_0);