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

时间:2015-06-01 21:59:27

标签: ios swift core-graphics

我创建了这个生成原始图像的方法,但是根据给定的大小为新图像添加了填充。一切都很好,除了图像的背景颜色总是黑色,虽然我将白色设置为填充颜色。知道如何解决这个问题吗?

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
}

2 个答案:

答案 0 :(得分:2)

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

此外,您应该将scale的{​​{1}}作为UIImage中的scale参数传递,而不是UIGraphicsBeginImageContextWithOptions。此外,您根本不需要推送和弹出上下文行 - 您已经在当前环境中工作。

答案 1 :(得分:0)

让我觉得你喜欢将背景颜色设置为"清除" (因为没有颜色)这意味着它将显示在背景视图上设置的任何颜色......这几乎肯定是黑色。

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