在视图可见后添加时,CALayer无法渲染

时间:2009-02-28 20:49:48

标签: iphone core-animation

我可能只是错过了一些非常简单的东西,但每当我在视图可见后添加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];
float xPos = [(CALayer*)[imageLayers lastObject] position].x + kShiftXPixels;

CALayer* layer1 = [CALayer layer];
[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 layer];
[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 个答案:

答案 0 :(得分:1)

事实证明这是一个错字造成的。在我调用setContents的行中,我发送的是UIImage而不是CGImage。发送正确的类型会导致预期的行为。