Ios 从文本创建图像(大小不正确)

Ios 从文本创建图像(大小不正确),ios,swift,uiview,uiimage,Ios,Swift,Uiview,Uiimage,我正在从ui视图子类中的ui标签文本创建图像。uilabel的文本在awakeFromNib中设置,并且每次应用程序启动时都会不同。图像捕获整个uilabel文本的唯一位置是layoutSubviews->,我认为这是由于帧大小的原因。请注意,在下面的代码中,我依赖于标签父视图上的边界。问题是layoutSubviews被多次调用,因此可能会多次创建此图像。我试图在didMoveToWindow和其他地方捕获图像,但只捕获了uilabel文本的一部分。这是制作图像的代码:有什么想法吗 func

我正在从
ui视图
子类中的
ui标签
文本创建图像。
uilabel
的文本在
awakeFromNib
中设置,并且每次应用程序启动时都会不同。图像捕获整个
uilabel
文本的唯一位置是
layoutSubviews
->,我认为这是由于帧大小的原因。请注意,在下面的代码中,我依赖于标签父视图上的
边界。问题是
layoutSubviews
被多次调用,因此可能会多次创建此图像。我试图在
didMoveToWindow
和其他地方捕获图像,但只捕获了
uilabel
文本的一部分。这是制作图像的代码:有什么想法吗

func createImage(withText text: NSAttributedString, inParent parent: UIView) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(frame.size, false, 0)
    text.draw(in: parent.bounds)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image!
}

我通常使用另一个变量来了解是否调用了LayoutSubView

var layoutInvoked = false

func layoutSubviews () -> (Void)
{
    super.layoutSubviews()
    if layoutInvoked == false
    {
        layoutInvoked = true
        // Do your stuff
    }
}
我不知道是否有更简单的方法,但这一个适合我

问题是LayoutSubView被多次调用,因此可能会多次创建此图像

但这就是为什么会给您提供
if
语句,这样您就可以确保只创建一次图像


能否检查parent.bounds和frame的大小和原点?请将UILabel中的文本保存一次,然后在每次调用layoutSubview时重新绘制UIImage。这就是为什么matt是matt,谢谢!我正在做类似的事情,但我的代码需要一些认真的重构,这使我觉得这比应该的更困难。
var createdImage = false
func createImage( ... {
    if !createdImage {
        createdImage = true
        // create image
    }
}