如何使用UIGraphicsBeginImageContextWithOptions绘制非标准形状?

时间:2017-11-15 01:56:43

标签: ios swift

我有一个泡泡形状的图像,我希望在图像的中间添加文字,所以我尝试使用UIGraphicsBeginImageContextWithOptions来重绘图像。

代码如下:

 let imageSize = CGSize(width: 40, height: 40)

        // the rect in which the image will be drawn in
        let imageRect = CGRect(origin: CGPoint.zero, size: imageSize)
        UIGraphicsBeginImageContextWithOptions(imageSize, true, 1.0)
        // begining drawing things

        // first, we draw the image in the specified rect
        image.draw(in: imageRect)

        let attributes = [ NSAttributedStringKey.foregroundColor: UIColor.red,
                           NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 20)]
        let text = "55"
        let size = text.size(withAttributes: attributes)
        let rect = CGRect(x: 20 - size.width / 2, y: 20 - size.height / 2, width: size.width, height: size.height)
        text.draw(in: rect, withAttributes: attributes)

        let newImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return newImage

但是我得到一个黑色背景的正方形,里面有所需的图像: enter image description here

蓝色是原始图像,黑色是重新绘制的图像。任何人都知道如何将图像绘制为原始图像?

谢谢!

1 个答案:

答案 0 :(得分:-1)

您需要将false而不是true传递给opaque函数调用的第二个参数(UIGraphicsBeginImageContextWithOptions参数)。

UIGraphicsBeginImageContextWithOptions(imageSize, false, 1.0)

您还应该将0作为第三个参数(scale)传递,以便缩放图像以匹配当前设备的屏幕比例。