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

时间:2016-12-12 16:29:42

标签: ios swift uiview uiimage

我正在UIlablel子类中的UIView文本中创建图像。 UIlablel的文本在awakeFromNib中设置,每次应用启动时都会有所不同。图片捕获整个UIlablel文字的唯一位置是layoutSubviews - >由于框架尺寸,我相信。请注意,在我的代码中,我依赖于标签的父视图上的bounds。问题是layoutSubviews被多次调用,因此可能会多次创建此图像。我尝试在didMoveToWindow和其他地方捕获图像,但只捕获了UIlablel文本的一部分。这是制作图像的代码:有什么想法吗?

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!
}

2 个答案:

答案 0 :(得分:0)

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

var layoutInvoked = false

func layoutSubviews () -> (Void)
{
    super.layoutSubviews()
    if layoutInvoked == false
    {
        layoutInvoked = true
        // Do your stuff
    }
}

我不知道是否有更简单的方法,但这个对我有用。

答案 1 :(得分:0)

  

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

但这就是为什么你被赋予了if语句,这样你就可以确保只在创建一次

var createdImage = false
func createImage( ... {
    if !createdImage {
        createdImage = true
        // create image
    }
}