OC_图片拉伸的几种方式(拉伸、切片)
拉伸前:(假如给一个button设置一个背景图片)
[self.myButton setBackgroundImage:[UIImage imageNamed:@"004"] forState:UIControlStateNormal];
效果如下:(四周很模糊,明显给用户很渣渣的感觉)
第一种:代码拉伸,封装到了一个分类里,直接调用即可:
封装的分类方法:
/**
* 返回一张可以随意拉伸不变形的图片
* @param name 图片名字
*/
+(UIImage *)stretchableImageWithImgae:(NSString *)name{
UIImage *normal = [UIImage imageNamed:name];
CGFloat w = normal.size.width * 0.5;
CGFloat h = normal.size.height * 0.5;
return [normal stretchableImageWithLeftCapWidth:w topCapHeight:h];
}
执行拉伸代码:
UIImage *image = [UIImage stretchableImageWithImgae:@"004"];
[self.myButton setBackgroundImage:image forState:UIControlStateNormal];
拉伸效果图如下:
第一种补充:resize方法(-resizableImageWithCapInsets)
该方法和第一种基本类似,但是这里不方便的地方就是预留的部分不好把握,因为要拉伸的图片大小不可控,不推荐使用,但是在这里也介绍一下。
UIImage *image = [UIImage imageNamed:@"004"];
CGFloat top = 10; // 顶端预留部分
CGFloat bottom = 10 ; // 底端预留部分
CGFloat left = 40; // 左端预留部分
CGFloat right = 40; // 右端预留部分
UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right);
///注意:拉伸之后一定要赋值回去
image = [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch];
//UIImageResizingModeStretch:`拉伸`模式,通过`拉伸`Insets指定的矩形区域来填充图片
//UIImageResizingModeTile:`平铺`模式,通过`重复显示`Insets指定的矩形区域来填充图片
[self.myButton setBackgroundImage:image forState:UIControlStateNormal];
第二种:点击图片直接使用切片拉伸:
进入Assets.xcassets -> 选中图片
执行代码:代码里和平常一样
UIImage *image = [UIImage imageNamed:@"004"];
[self.myButton setBackgroundImage:image forState:UIControlStateNormal];
第二种补充:平铺效果
第二种补充:聊天气泡效果
最后的两个补充,代码都是很正常的代码:
UIImage *image = [UIImage imageNamed:@"001"];
[self.myButton setBackgroundImage:image forState:UIControlStateNormal];
怎么样,这个切片拉伸功能强大吧?也很方便吧??推荐使用哦!