iphone - 将 UIImage 绘制到 CALayer.contents 中不会渲染图像数据

标签 iphone ios graphics core-animation calayer

我正在努力让图像显示在 CALayer.contents 中。这看起来很简单,但无论我做什么我都无法渲染图像。 CALayer 渲染良好,因为我可以看到它的背景颜色和圆角半径,但图像不会加载。

enter image description here

您在这里看到的是应用了 mask 的 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 丢弃该内容并要求替换。

关于iphone - 将 UIImage 绘制到 CALayer.contents 中不会渲染图像数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972985/

相关文章:

iphone - 在运行时循环遍历所有对象属性

ios - Swift 错误,UIMenuItem 到 UIview/UIlabel 进行复制

iOS 7 状态栏问题

delphi - 计算渐变颜色的最快方法?

即使我将 JPanel 添加到 JFrame,Eclipse 上的 Java 也不会显示 JPanel

iphone - 使用应用程序加载器上传到应用程序商店然后出现错误?

iphone - 对象被过早释放?

iphone - 将 UIImage 转换为字节

ios - MWPhotoBrowser 不显示导航标题中单个图像的显示图像名称

Java 平台游戏性能