2012-06-10 49 views
5

我有一段噁心的時間試圖讓圖像出現在CALayer.contents中。這看起來很直截了當,但無論我做什麼,我都無法讓圖像呈現。 CALayer渲染得很好,因爲我可以看到它的背景顏色和角半徑,但圖像不會加載。將UIImage繪製到CALayer.contents不會渲染圖像數據

enter image description here

你所看到的是一個CAGradientLayer子類應用了面具。內部正方形是我想要顯示圖像的位置,並且它被添加爲CAGradientLayer子類的子圖層。

設置它的代碼非常簡單。在init

self.imageLayer = [CALayer layer]; 
self.imageLayer.cornerRadius = kDefaultCornerRadius; 
self.imageLayer.backgroundColor = [UIColor darkGrayColor].CGColor; 
[self addSublayer:self.imageLayer]; 

再後來,我設置圖像:

- (void)setImage:(UIImage *)image { 
    self.imageLayer.contents = (id)image.CGImage; 
    [self.imageLayer setNeedsDisplay]; 
} 

最後,內setFrame

CGFloat imageSize = self.bounds.size.width - 2*kDefaultMargin; 
[self.imageLayer setBounds:CGRectMake(0.0, 0.0, imageSize, imageSize)]; 
[self.imageLayer setPosition:CGPointMake(self.bounds.size.width/2.0f, kDefaultMargin + imageSize/2.0f)]; 
[self.imageLayer setNeedsDisplay]; 

事情我已經知道或已經檢查:

  1. 該圖層是obv只是通過它可見而明顯增加。
  2. 圖像被添加和工作。 [UIImage imageNamed:@"info.png"]正在代碼中的其他地方使用,並實際顯示和圖像。它在1x時爲16x16,在2x時爲32x32
  3. 正在按正確的邏輯順序調用代碼:initsetImage:,setFrame;

這是怎麼回事?

+0

與[此問題](http://stackoverflow.com/q/10060912/1218876)中相同的問題和解決方案。不要調用'[self.imageLayer setNeedsDisplay]'。 –

+0

確實,請讓它成爲答案,而不是評論,所以我可以接受它。 – coneybeare

回答

13

刪除此行:

[self.imageLayer setNeedsDisplay]; 

-setNeedsDisplay告訴它需要重繪其內容的層。由於您已經提供了該圖層的內容,因此您不希望CA丟棄該內容並要求替換。