使用转换绘制UILabel

时间:2016-07-21 00:02:39

标签: ios swift uilabel

我有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是带有正确文本的标签图像,但没有转换。如何确保视图使用变换进行绘制?

2 个答案:

答案 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)