繁体   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