如何检查CALayer是否存在

时间:2011-03-22 21:48:24

标签: iphone objective-c core-animation calayer

我有一个CALayer,它在y轴上的屏幕外动画(移动)。 在屏幕外我正在做[myLayer removeFromSuperLayer]因此它从视图中消失并且不会回到起始位置。

当图层仍然在视图中时,可以通过按下切换按钮暂停并恢复它,这一切都很好。

唯一的问题是[myLayer removeFromSuperLayer]运行后我的应用程序崩溃了。 这是因为按钮试图暂停或恢复不再存在的图层。

如何检查图层是否已移除或仍在视图中?

对于我的切换按钮的暂停部分,我认为是这样的:

if (self.myLayer == nil)
    {
        // here i want to add the layer again
        [self.view.layer addSublayer:myLayer];
        // immediately pause it
        [self pauseLayer:myLayer];

    }

else

    {
        // just pause no need to create the layer again because it's still there 
        [self pauseLayer:myLayer]; 
    }

你可能会怀疑self.myLayer == nil不是这样做的,但那是什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

从超级图层中删除图层不会导致图层变为零,这就是您的self.myLayer == nil检查不起作用的原因。但是,当您删除字段时,可以轻松地将字段设置为nil,例如:

[self.myLayer removeFromSuperLayer];
self.myLayer = nil;

当然,如果您需要在此之后再次添加它,那么您需要将图层重新分配给self.myLayer(如果您有一个引用它以保留其他地方)或创建一个从头开始的新图层实例。