我有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()
现在,出现的result
UIImage是带有正确文本的标签图像,但没有转换。如何确保视图使用变换进行绘制?
答案 0 :(得分:0)
您需要获取当前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
答案 1 :(得分:0)
要在第二个代码段的第3行开始一个小的更改。将label.drawTextInRect(view.frame)
替换为label.drawTextInRect(label.frame)
。
然而,为了正确维护转换,我发现最简单的方法是创建一个包装器UIView。仍然将转换应用于标签,但将包装器视图绘制为UIImage而不是标签。使用以下行:
wrapperView.drawViewHierarchyInRect(wrapperView.frame, afterScreenUpdates: true)