CALayer 在视图可见后添加时不渲染

Posted

技术标签:

【中文标题】CALayer 在视图可见后添加时不渲染【英文标题】:CALayer not rendering when added after view visible 【发布时间】:2009-02-28 20:49:47 【问题描述】:

我可能只是错过了一些非常简单的东西,但是每当我在视图可见后添加 CALayers 时,它们都不会渲染。这是我正在使用的代码:

[[imageLayers objectAtIndex:0] removeFromSuperlayer];
[imageLayers removeObjectAtIndex:0];
[[imageLayers objectAtIndex:0] removeFromSuperlayer];
[imageLayers removeObjectAtIndex:0];
firstImageOffset = (firstImageOffset + 2) % [pieceCache count];
int topIndex = (firstImageOffset + 6) % [pieceCache count];
int bottomIndex = (firstImageOffset + 7) % [pieceCache count];
浮动 xPos = [(CALayer*)[imageLayers lastObject] 位置].x + kShiftXPixels;

CALayer* layer1 = [CALayer 层];
[layer1 setFrame:CGRectMake(0, 0, kImageWidth, kImageHeight)];
[layer1 setContents:(id)[UIImage imageNamed:[[pieceCache objectAtIndex:topIndex] objectForKey:@"image_name"]]];
[[[self view] layer] addSublayer:layer1];
[layer1 setPosition:CGPointMake(xPos, kTopRowYPos)];
[imageLayers addObject:layer1];

CALayer* layer2 = [CALayer 层];
[layer2 setFrame:CGRectMake(0, 0, kImageWidth, kImageHeight)];
[layer2 setContents:(id)[UIImage imageNamed:[[pieceCache objectAtIndex:bottomIndex] objectForKey:@"image_name"]]];
[[[self view] layer] addSublayer:layer2];
[layer2 setPosition:CGPointMake(xPos, kBottomRowYPos)];
[imageLayers addObject:layer2];

我也尝试过重用相同的图层并将内容设置为不同的 CGImage(通过 setContents:),这也会导致图层停止渲染(更具体地说,它的动画效果就好像不透明度已设置为 0 一样它仍然是1)。我已经通过枚举视图层的子层验证了这些层实际上是在视图的层树中。他们似乎有正确的图像并且在正确的位置,他们只是不画画。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

事实证明,这是由于拼写错误造成的。在我调用 setContents 的行中,我发送的是 UIImage 而不是 CGImage。发送正确的类型会产生预期的行为。

【讨论】:

以上是关于CALayer 在视图可见后添加时不渲染的主要内容,如果未能解决你的问题,请参考以下文章

CATiledLayer 到 CALayer

iOS6 CALayer释放/卸载滚动视图中滚动不可见的视图

无法让 CALayer 在 UIView 中显示

为啥masksToBounds = YES会阻止CALayer阴影?

让CALayer的shadowPath跟随bounds一起做动画改变-b

带有透明孔的 CALayer