我可能只是错过了一些非常简单的东西,但每当我在视图可见后添加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)。我通过枚举视图图层的子图层验证了图层实际上在视图的图层树中。他们似乎有正确的图像并处于正确的位置,他们只是不画画。任何帮助将不胜感激。
答案 0 :(得分:1)
事实证明这是一个错字造成的。在我调用setContents的行中,我发送的是UIImage而不是CGImage。发送正确的类型会导致预期的行为。