CALayer - 未调用显示方法

Posted

技术标签:

【中文标题】CALayer - 未调用显示方法【英文标题】:CALayer -display method not being called 【发布时间】:2011-12-30 17:11:51 【问题描述】:

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

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

如果您需要查看一些代码,请告诉我。

有什么想法吗?

更新

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

【问题讨论】:

别担心尴尬 - 如果您遇到问题,其他人最终也会遇到问题,您发布答案会对他们有所帮助。 好吧,我的问题的解决方案与我原来的问题没有任何关系,因此我认为任何人都不会对它感兴趣。无论如何,我会用我的愚蠢错误发布答案。 【参考方案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];

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

【讨论】:

以上是关于CALayer - 未调用显示方法的主要内容,如果未能解决你的问题,请参考以下文章

动画期间未调用 CALayer setPosition

CALayer委托方法drawLayer没有被调用

CALayer 的 position和anchorPoint属性

CALayer 的 position和anchorPoint属性

iOS CALayer 简单介绍

CALayer的认识