我有一个UILabel
(但这应该适用于任何UIView
)。我正在尝试在 UIImage
上绘制标签。
首先,我对标签应用了转换:
let label = UILabel(frame: CGRectMake(0,0,100,100))
label.text = "Fizz Buzz"
label.transform = CGAffineTransformRotate(label.transform, 5)
label.transform = CGAffineTransformScale(label.transform, 2, 2)
label.setTranslation(CGPointMake(10, 15), inView: view)
然后,我想将标签绘制到图像上。
UIGraphicsBeginImageContextWithOptions(view.frame.size, false, 0)
let context = UIGraphicsGetCurrentContext()
label.drawTextInRect(view.frame)
let result = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
现在,出现的结果
UIImage 是带有正确文本的标签图像,但没有进行转换。如何确保 View 随变换一起绘制?
最佳答案
您需要获取当前的 UIImage 数据而不仅仅是框架才能向该图像添加文本。我下面有一个简单的函数,可以将文本添加到图像中。如果您使用的是 UIImageView ,您可以获取当前分配给它的图像,将其传递给函数并将函数返回的图像设置为该 UIImageView。
extension UILabel
{
func getRenderedImage() -> UIImage
{
UIGraphicsBeginImageContextWithOptions(self.frame.size, false, 0)
var context = UIGraphicsGetCurrentContext()
CGContextSaveGState(context)
self.layer.renderInContext(context!)
let renderedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return renderedImage
}
}
用法示例:
let newImage = label.getRenderedImage()
imagView.image = newImage
关于ios - 绘制带有变换的 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38492713/