从文本创建图像(大小不正确)
Posted
技术标签:
【中文标题】从文本创建图像(大小不正确)【英文标题】:Create image from text (incorrect size) 【发布时间】:2016-12-12 16:29:42 【问题描述】:我正在从 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!
【问题讨论】:
你能检查一下 parent.bounds 和 frame 的大小和来源吗? 保存一次UILabel中的文本,然后每次layoutSubview调用时重绘UIImage。 【参考方案1】:问题是 layoutSubviews 被多次调用,所以这个图像可能会被创建多次
但这就是为什么你得到了if
声明,这样你就可以确保图像只被创建一次。
var createdImage = false
func createImage( ...
if !createdImage
createdImage = true
// create image
【讨论】:
这就是为什么亚光是亚光,谢谢!我正在做与此类似的事情,但我的代码需要进行一些认真的重构,这让我觉得它比原本应该做的更困难。【参考方案2】:我通常使用另一个变量来知道是否调用了 layoutSubviews。
var layoutInvoked = false
func layoutSubviews () -> (Void)
super.layoutSubviews()
if layoutInvoked == false
layoutInvoked = true
// Do your stuff
我不知道是否有更简单的方法,但是这个对我有用。
【讨论】:
以上是关于从文本创建图像(大小不正确)的主要内容,如果未能解决你的问题,请参考以下文章
Swift Parse - UITableViewAutomaticDimension 从解析下载图像时它们的大小不正确,直到我滚动