簡體   English   中英

將UIImage繪制到CALayer.contents中不會渲染圖像數據

[英]Drawing a UIImage into CALayer.contents does not render image data

我有一個邪惡的時間試圖讓圖像顯示在CALayer.contents 它似乎相當直接,但無論我做什么,我都無法渲染圖像。 CALayer渲染得很好,因為我可以看到它的背景顏色和角半徑,但圖像不會加載。

在此輸入圖像描述

你在這里看到的是一個應用了蒙版的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. 顯然,通過它可見,正確地添加了該層。
  2. 圖像被添加並起作用。 [UIImage imageNamed:@"info.png"]正在代碼中的其他地方使用,實際上是顯示和圖像。 1x時為16x16,2x時為32x32
  3. 代碼以正確的邏輯順序調用: initsetImage:setFrame ;

這里發生了什么?

刪除此行:

[self.imageLayer setNeedsDisplay];

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM