正在尝试将UILabel放置到UIImage中,我可以更改标签框架的宽度和高度
但无法更改X和Y值请帮助我更改X和Y值。
这就是我调用方法的方式

self.imfFront.image = generateImageWithText(text: "Hello World !")

这里是方法
func generateImageWithText(text: String) -> UIImage
{
    let image = UIImage(named:"img_forest")!
    let imageView = UIImageView(image: image)
    imageView.backgroundColor = UIColor.clear
    imageView.frame = CGRect(x:0, y:0, width:image.size.width, height:image.size.height)

    let label = UILabel(frame: CGRect(x:50, y:50, width:image.size.width-50, height:image.size.height-50))
    label.backgroundColor = UIColor.lightGray
    label.textAlignment = .center
    label.textColor = UIColor.white
    label.text = text

    UIGraphicsBeginImageContext(imageView.bounds.size)
    imageView.layer.render(in: UIGraphicsGetCurrentContext()!)
    label.layer.render(in: UIGraphicsGetCurrentContext()!)
    let imageWithText = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext();
    return imageWithText!
}

下面是参考图片
ios - UILabel渲染到UIImage-LMLPHP

最佳答案

如果您要指定一个labelRect这样:

let labelRect = CGRect(x: 50, y: 50, width: image.size.width - 100, height: image.size.height / 16)
let label = UILabel(frame: labelRect)

而不是:
label.layer.render...

你可以写:
label.drawHierarchy(in: labelRect, afterScreenUpdates: true)

然后,UIImageView中显示的结果图像将如下所示:
ios - UILabel渲染到UIImage-LMLPHP
对labelRect的x或y值的任何更改都会移动标签。
一句话:你应该记住你是在一个图像上画的,所以标签字体的实际大小取决于图像的分辨率。根据您的要求,这可能是您的意图,也可能不是。

09-26 19:58