了解 Image 的 capInsets 和 resizingMode

Dec 04, 2019 • 预计阅读时间 1 分钟

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

iOS
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

在 swift 里扩展 UIColor 使用十六进制颜色值

视网膜屏幕下像素对齐计算方法