拉伸 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 到画布上中间就是空白。