【问题标题】:Drawing a UIImage into CALayer.contents does not render image data将 UIImage 绘制到 CALayer.contents 中不会渲染图像数据
【发布时间】:2012-06-10 22:51:22
【问题描述】:

我正忙着让图片显示在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. 以正确的逻辑顺序调用代码:init、setImage:、setFrame;

这是怎么回事?

【问题讨论】:

  • 与this question 相同的问题和解决方案。不要打电话给[self.imageLayer setNeedsDisplay]。

标签: iphone ios graphics core-animation calayer


【解决方案1】:

删除这一行:

[self.imageLayer setNeedsDisplay];

-setNeedsDisplay 告诉图层它需要重绘其内容。由于您已经为图层提供了内容,因此您不希望 CA 丢弃该内容并要求替换。

【讨论】:

    猜你喜欢
    • 2014-04-09
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多