2016-12-12 49 views
-1

我在子類中創建了UIlablel的文本中的圖像。 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

你能檢查parent.bounds和frame的大小和來源嗎? –

+0

一次保存來自UILabel的文本,然後每次layoutSubview調用時重繪UIImage。 –

回答

0

的問題是,layoutSubviews被多次調用所以這個圖像可以被創建多次

但是,這就是爲什麼你被賦予了if聲明,這樣就可以確保圖像只創建一次

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

這就是爲什麼馬特是亞光,謝謝!我正在做類似這樣的事情,但是我的代碼需要進行一些嚴肅的重構,這讓我看起來更難以理解。 – JEL

0

我通常使用另一個變量來知道layoutSubviews是否已被調用。

var layoutInvoked = false 

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

我不知道是否有更簡單的方法,但是這個爲我工作。

相關問題