swift4 图片拉伸

这里以聊天界面气泡图为例
设计给的气泡原图大小是这样的,


chatPopGreenImg.png

我们真正用到的是跟微信一样的,根据消息的长短自适应气泡的宽度和高度,如下图


63020A46-9731-4C9B-9844-85C72C6E3683.png

其实,这个并不难,网上也有很多例子,但是,自己弄的时候,还是因为粗心调入了一个坑,

一:详细讲下实现的过程

实现图片的拉伸不需要其他额外的第三方,也不用对图片进行额外操作,
不用像安卓那样自己制作点九图,但是跟安卓的点九图实现的效果是一样的(不懂点九图片的可自行百度,这里不做详解)
iOS 里面的图片拉伸代码如下

//首先定义一张图片
var image = UIImage(named: "chatPopGreenImg")
//设置拉伸图片时,需要用来填充拉伸位置的部分(下面详解)
let insets = UIEdgeInsetsMake((image?.size.height)!/2 + 10, 10, 10, 10)
 // 指定为拉伸模式,伸缩后重新赋值
/*
注意这里一定要重新赋值,否则拉伸无效,这里千万注意!千万注意!千万注意!(我就掉进这个坑了)
*/
image = image?.resizableImage(withCapInsets: insets, resizingMode: .stretch)

//将拉伸后的图片,给imageview和button
chatImgView.image = image
 chatButn.setBackgroundImage(image, for: .normal)

/*另外一种直接将image的一系列设置,
写成一句代码也是可以的,
不容易犯错,这里直接再将image给imageview和button即可*/
let image = UIImage(named: "chatPopGreenImg")?.resizableImage(withCapInsets: UIEdgeInsetsMake((image?.size.height)!/2 + 10, 10, 10, 10), resizingMode: UIImageResizingMode.stretch)

上面这些代码就完成了图片的拉伸,是不是Soeasy,哈哈

二:着重讲下UIEdgeInsetsMake

1350207-5ea71c94e013a67f.png

UIEdgeInsetsMake(_ top: CGFloat, _ left: CGFloat, _ bottom: CGFloat, _ right: CGFloat)的四个参数如上图的标注,四个参数包括的范围的图片部分是不用拉伸的,
如:上面例子的聊天气泡,
top:因为我右侧箭头上面的内容都不能拉伸,则,这里的top=(image?.size.height)!/2 + 10,(image?.size.height)!/2是图片1/2除,再往下10像素,
其他三个都是10个像素
最后拉伸的区域就是这一块


305A5281-F4D2-48AC-AC45-6D2CF240E3FD.png

好了,图片拉伸的所有情况就是这样的,有说的不对的地方欢迎大家指正!

你可能感兴趣的:(swift4 图片拉伸)