我正在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!
}
答案 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
}
}