代码实现:
#pragma mark - iOS 调整9Patch
- (UIImage *)auto9PatchWithImage:(UIImage *)fixedImage {
UIImage *image = fixedImage;
//決定图片拉伸的位置
CGFloat top = 42;
CGFloat bottom = 20;
CGFloat left = 42;
CGFloat right = 20;
UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right);
image = [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch];
return image;
}
UIImageResizingModeStretch:
对于拉伸的方式,有以下两种:
typedef NS_ENUM(NSInteger, UIImageResizingMode) {
UIImageResizingModeTile,(瓦片)
UIImageResizingModeStretch,(伸展)
};
IUIImageResizingModeStretch :拉伸模式,通过拉伸UIEdgeInsets 指定的矩形区域来填充图片UIImageResizingModeTile :平铺模式(瓦片),通过重复显示UIEdgeInsets 指定的矩形区域来填充图
capInsets参数为UIEdgeInsetsMake(42, 20, 42, 20)时
当我们向拉伸方法传入该组参数时,代表我们对原始图像除数字5以外的区域进行保护(即两个红色方块围起来的区域).其拉伸效果如图 在该种情况下,我们可以发现拉伸后的图像中:
- 在X轴上,由于1被左边和上边的设置保护,3被右边和上边的设置保护,所以只能用中间的2来拉伸,同理最底下的7,8,9
- 在Y轴上,由于1被左边和上边的设置保护,7被左边和下边的设置保护,所以只能用中间的4来拉伸,同理最底下的3,6,9
UIImageResizingModeTile:
capInsets参数为UIEdgeInsetsMake(42, 20, 42, 20)时
当我们向拉伸方法传入该组参数时,代表我们对原始图像除数字5以外的区域进行保护(即两个红色方块围起来的区域).其拉伸效果如图 在该种情况下,我们可以发现拉伸后的图像中:
- 在X轴上,由于1被左边和上边的设置保护,3被右边和上边的设置保护,所以只能用中间的2来平铺,同理最底下的7,8,9
- 在Y轴上,由于1被左边和上边的设置保护,7被左边和下边的设置保护,所以只能用中间的4来平铺,同理最底下的3,6,9
- 由于5没有被保护,所以在整个剩余的空间中,用5进行平铺填充?
|