UIImage Aspect使用drawInRect时填充?

时间:2017-03-29 12:56:32

标签: ios swift uiimage

我试图像内容模式一样绘制scaleAspectFill。

我发现如何使用AVFoundation制作sacelAspectFit但我找不到scaleAspectFill。

如果我画水平图像,我不知道x值

image.draw(in: CGRect(origin: CGPoint.init(x: ?, y: 0), size: CGSize(width: displayWidth*(image.size.width/image.size.height), height: displayWidth)))

1 个答案:

答案 0 :(得分:14)

假设您有一个名为image的图像,并且您希望在矩形targetRect内绘制它以使其填充矩形而不会失真,您可以使用以下代码:

let aspect = image.size.width / image.size.height
let rect: CGRect
if targetRect.size.width / aspect > targetRect.size.height {
    let height = targetRect.size.width / aspect
    rect = CGRect(x: 0, y: (targetRect.size.height - height) / 2,
                  width: targetRect.size.width, height: height)
} else {
    let width = targetRect.size.height * aspect
    rect = CGRect(x: (targetRect.size.width - width) / 2, y: 0,
                  width: width, height: targetRect.size.height)
}
image.draw(in: rect)

注意:这不会剪切图像,因此它会在目标rect的边缘之外绘制。如果要剪辑图像,请在绘图前调用CGContextClipToRect(context, rect)

另请注意,核心图形垂直轴是翻转的,与UIGraphics相比,从左下角开始而不是从左上角开始,因此您可能需要相应地翻转矩形和裁剪矩形。