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