拉伸 UIImage 的时候使用的方法是 resizableImage,它的声明如下:
func resizableImage(
withCapInsets capInsets: UIEdgeInsets,
resizingMode: UIImage.ResizingMode
) -> UIImage
capInsets 指定要保护的区域,就是图像的四个角落,如果大小是 0 就表示不需要保护resizingMode 非保护区域里的图像应该怎么显示,两个选择:拉伸或者平铺内容
原图如下,capInsets 指定保护区域为四个角落的黑色方块
中间的区域使用数字进行标识:

resizingMode: .tile ,平铺模式的效果:

resizingMode: .stretch ,拉伸模式的效果:

默认模式是 .stretch
Note
这里有一个地方需要注意:在使用 UIImage 的 draw 方法画图的时候,capInsets 设定的区域需要给图像中间保留一小块区域,否则虽然显示正常但是画出来的图像中间是空的。
比如图像的大小是 12 x 12, capInsets 如果设置为 {6, 6, 6, 6},那么中间就没有空间拉伸或平铺了,虽然在 UIImageView 里显示没有问题,但是 draw 到画布上中间就是空白。
