CALayer addsublayer不添加子图层

时间:2011-03-01 07:32:22

标签: objective-c core-animation calayer

我遇到了最奇怪的问题:有时向CALayer添加子图层不起作用([layer addSublayer:child]),即子图层数保持为0并且屏幕上没有任何内容。

有时它可以正常工作并且子图层会像我预期的那样显示在屏幕上。如果没有,通常执行干净的构建会修复它,但并非总是如此。我还尝试从终端运行我的应用程序的两个实例,通常第二个实例显示有问题的行为。

这是(缩写)代码:

   NSLog(@"Retain count before: %d", [childLayer retainCount]);
   // [parentLayer insertSublayer:childLayer atIndex:0]; // same problem here
   [parentLayer childLayer];
   NSLog(@"Retain count after: %d layer: %@", [childLayer retainCount], childLayer);
   NSLog(@"Sublayercount: %d", [[parentLayer sublayers] count]);

子图层是基本图层,背景设置为RGB颜色。

调试输出:

layer: <CALayer: 0x1982b0> X: 50.00 Y: -90.00 width: 200.00 height: 200.00
Retain count before: 2
Retain count after: 2 layer: <CALayer: 0x1982b0>
Sublayercount: 0

当它确实有效时,上面的输出显示保留计数正确增加到3,子层数增加到1

CALayers有什么特别之处吗? addSublayer是否依赖其他内容/执行子层的有效性检查?

有人可以建议一种方法来调试吗?有没有办法让我用调试器进入addSublayer

谢谢!标记

2 个答案:

答案 0 :(得分:2)

我终于明白了。有时候谈论(好吧,发布)这个问题会有所帮助。

事实证明,我初始化保存图层的自定义视图的方式存在问题。对应用程序控制器的awakeFromNib调用与视图之间存在竞争条件。应用程序控制器将加载自定义图层,但有时自定义视图尚未初始化。

解决方案是将应用控制器中视图的初始化代码从awakeFromNib移至appliationDidFinishLaunching

答案 1 :(得分:2)

retainCount没用;不要叫它......

很高兴你能解决问题。