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