没有调用CALayer -display方法

时间:2011-12-30 17:11:52

标签: objective-c ios cocoa-touch ipad core-animation

我正在使用CoreAnimation为iPad构建一本图画书。我做了类似Sprite类(CALayer子类)的东西,以便能够从精灵表加载我的动画帧。与此类似的东西:http://mysterycoconut.com/blog/2011/01/cag1/。 我没有使用图层的委托来设置边界和contentsRect(在我的情况下,也是位置),但我直接在CALayer子类的-display方法中进行。

我创造了一个假人,它运作得很好。当我将代码移动到我的项目中时,我的子类的-display方法不再被调用。我已经阅读了很多次CALayer和CoreAnimation Programming Guide的文档,但我找不到有关何时调用-display方法的任何信息。我只知道它使用模板模式,这意味着,我不应该自己调用它,而应该调用[layer setNeedsDisplay],它调用-display方法本身。我也尝试过这样做,没有成功。

如果您需要查看某些代码,请与我们联系。

有什么想法吗?

更新

我找到了没有调用该方法的原因。它太尴尬了,不值得一提:0。无论如何,我仍然有兴趣知道何时调用-display方法。我注意到我必须创建一个动画才能触发它。如果我刚用[layer addSublayer:myCustomLayer]将图层添加到显示层次结构中,则不会调用该方法。

1 个答案:

答案 0 :(得分:1)

这就是我做错了。我正在创建一个新的图层指针,而不是使用添加到图层层次结构中的指针。

CALayer *layer = nil;

if (animatedLayer == YES)
{
    // Here's the problem, I created a new layer pointer instead of using the one before. 
    AnimatedLayer *layer = [[AnimatedLayer alloc] init];

    // more stuff being done to the AnimatedLayer
}
else
{
    layer = [[CALayer alloc] init];

    // more stuff being done to the CALayer
}

[masterLayer addSublayer:layer];
[layer release];

这么愚蠢的错误,我花了几个小时来调试!我应该多睡一会儿,不要再喝那么多咖啡。