图片拉伸(聊天气泡)
图片受保护区域的图片拉伸,分别以代码跟Assets两种方式。
代码方式如下几种方式:
- 第一种返回一个调整好的图片,参数capInsets设置一个受保护的区域。受保护区域一般会以图片的大小为参数,设置可变区域为图片的中心11中心为可变区域。UIEdgeInsetsMake(iamgeHeight0.5, imageWidth0.5,iamgeHeight0.5 - 1 , imageWidth*0.5-1)
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets
- 第二种方式可以设置模型
UIImageResizingModeTile = 0,
//平铺
UIImageResizingModeStretch = 1,
//拉伸
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode
- 第三种方式是系统帮你计算好的,传一个leftCapWidth左边受保护的区域, 右边的保护区域 = 图片的宽度 - leftCapWidth - 1;另一个topCapHeight上边的保护区域,下面的保护区域 = 图片的高度 - topCapHeight - 1
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight
如果项目中经常使用可以增加一个扩展类
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UIImage (YZImage)
+(instancetype)reziableImageWithImageName:(NSString *)imageName;
@end
NS_ASSUME_NONNULL_END
#import "UIImage+YZImage.h"
@implementation UIImage (YZImage)
+(instancetype)reziableImageWithImageName:(NSString *)imageName{
UIImage *image = [UIImage imageNamed:imageName];
CGFloat imageWidth = image.size.width;
CGFloat imageHeight = image.size.height;
return [image stretchableImageWithLeftCapWidth:imageWidth*0.5 topCapHeight:imageHeight*0.5];
}
@end
非代码的方式:
- Assets.xcasset->选中图片->slicing选中Horizontal and vertical下面就有区域可以选择,具体的原理同代码的相同