所以我有一个带有 UIImage 的 UICollectionViewCell,并且我试图使 UIImage 具有纯白色背景,并在其顶部覆盖文本。我搜索了如何分别执行这些操作,这就是我所拥有的:
创建纯色 UIImage:
let rect = CGRect(origin: .zero, size: CGSize(width: 1, height: 1))
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
let color = UIColor.white
color.setFill()
UIRectFill(rect)
let whiteImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
然后我调用函数 textToImage
:
let textImage = textToImage(drawText: "Placeholder text", inImage: whiteImage, atPoint: CGPoint(x: 20.0, y: 20.0))
其中textToImage
函数是:
func textToImage(drawText text: NSString, inImage image: UIImage, atPoint point: CGPoint) -> UIImage {
let textColor = UIColor.black
let textFont = UIFont(name: "Helvetica Neue", size: 74)
UIGraphicsBeginImageContext(image.size)
let textFontAttributes = [
NSFontAttributeName: textFont,
NSForegroundColorAttributeName: textColor,
] as [String : Any]
image.draw(in: CGRect(origin: CGPoint.zero, size: image.size))
let rect = CGRect(origin: point, size: image.size)
text.draw(in: rect, withAttributes: textFontAttributes)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
然后将 textImage 设置为 UICollectionViewCell 的 UIImage。
textToImage 函数适用于普通图像,但如果我尝试先创建纯色图像,然后尝试在新创建的图像上调用 textToImage,纯色会显示,但文本不会显示。关于这里可能出现什么问题有什么建议吗?谢谢!
最佳答案
几个问题。您的主要问题是 whiteImage
只有 1x1 点。因此,当您将其传递给 textToImage
时,您将创建一个新的 1x1 图像。如此小的图像上的文字很难阅读。
创建具有更有用尺寸的 whiteImage
,事情会好得多。
let rect = CGRect(origin: .zero, size: CGSize(width: 600, height: 300)) // pick a useful size
您还应该更改:
UIGraphicsBeginImageContext(image.size)
至:
UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)
关于swift - 创建一个纯色的 UIImage 并在顶部添加文本(Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47915958/