Swift - 核心图形和设置背景颜色?

Swift - Core graphics and setting background color?

我创建了这种方法,它从原始图像生成图像,但根据给定的大小向新图像添加填充。尽管我将白色设置为填充颜色,但图像的背景颜色始终为黑色,但一切正常。知道如何解决这个问题吗?

public extension UIImage {

    public func imageCenteredInParentWithSize(size: CGSize, backgroundColor: UIColor = UIColor.clearColor()) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(CGSizeMake(size.width, size.height), true, 0.0)
        let context = UIGraphicsGetCurrentContext()
        UIGraphicsPushContext(context);

        let origin = CGPointMake(
            (size.width - self.size.width) / 2.0,
            (size.height - self.size.height) / 2.0
        )

        backgroundColor.setFill()
        drawAtPoint(origin)

        UIGraphicsPopContext()
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return newImage
    }

}

编辑:

这是工作版本

public func imageCenteredInParentWithSize(size: CGSize, backgroundColor: UIColor = UIColor.clearColor()) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(size.width, size.height), true, UIScreen.mainScreen().scale)
    let context = UIGraphicsGetCurrentContext()

    let origin = CGPointMake(
        (size.width - self.size.width) / 2.0,
        (size.height - self.size.height) / 2.0
    )

    backgroundColor.setFill()
    CGContextFillRect(context,  CGRectMake(0, 0, size.width, size.height))
    drawAtPoint(origin)

    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage
}

在我看来,您将背景颜色设置为 "Clear"(无颜色),这意味着它将显示背景视图中设置的任何颜色...几乎可以肯定是黑色。

您需要将默认设置为 "UIColor.whiteColor()"。

backgroundColor.setFill()行只是设置了当前上下文的填充颜色,并没有真正进行填充。执行填充的一种方法是在设置填充颜色后调用 CGContextFillRect(context, CGRect(x: 0, y: 0, width: size.width, height: size.height))

此外,您可能应该将 UIImagescale 作为 UIGraphicsBeginImageContextWithOptions 中的 scale 参数传递,而不是 0.0。此外,您根本不需要 push- 和 pop-context 行 - 您已经在当前上下文中工作了。