在UIImage中打出一个清晰的洞

时间:2018-03-19 12:04:55

标签: swift cgrect

我正试图在uiimage中设置一个透明的洞这是我到目前为止所发现的:

let hole = CGRect(x: 0, y: 0, width: 50, height: 50)
let context = UIGraphicsGetCurrentContext()!
context.clear(hole)
myImage.image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()

但我在let context = UIGraphicsGetCurrentContext()!

得到零

我知道我需要在某处定义当前的上下文,但我不知道在哪里以及如何

1 个答案:

答案 0 :(得分:1)

您需要有一个可供绘制的上下文。使用UIGraphicsBeginImageContext明确创建一个,当您完成绘图时,请致电UIGraphicsEndImageContext进行清理。

此处您的代码(通过调用UIGraphicsBeginImageContext)包含在扩展方法中:

extension UIImage {
    func imageWithHole(at rect: CGRect) -> UIImage? {
        UIGraphicsBeginImageContext(self.size)
        guard let context = UIGraphicsGetCurrentContext() else { return nil }
        self.draw(at: CGPoint.zero)
        context.clear(rect)
        let resultImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return resultImage
    }
}

像这样使用:

let sourceImage = UIImage(named: "sample.jpg")

let imageWithHole = sourceImage?.imageWithHole(at: CGRect(x: 50, y: 50, width: 50, height: 50))