ios - 绘制带有变换的 UILabel

标签 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()

现在,出现的结果 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/

相关文章:

iphone - 在一个 Git 存储库中维护不同国家/地区的 iOS 应用程序

swift - 如何获取navigationBar.titleTextAttributes?在 Swift 4.0 中工作?

ios新创建的swift文件在xcode中默认导入cocoa

iOS UILabel 边界矩形大小不正确

ios - 在 Interface Builder 中更改 UILabel 上的字符间距

ios - SF UI Text-Light(New san francisco)字体不起作用

ios - React Native 创建使用 cocoapods 的库

iphone - 检测低电量警告ios

iphone - 如何在 Storyboard应用程序中从一个场景访问变量到另一个场景?

ios - 在 swift 4 下更改导航 Controller 后退按钮上的字体