2009-02-28 61 views
0

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

[[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

事实证明,这是由于错字造成的。在我打电话给setContents的行中,我将它发送给UIImage而不是CGImage。发送正确的类型会导致预期的行为。