2011-03-22 121 views
1

我有一個CALayer,它在Y軸上以離屏形式進行動畫(移動)。 它脫離屏幕後,我正在做一個[myLayer removeFromSuperLayer]所以它從視圖中消失,並沒有回到起始位置。如何檢查CALayer是否存在

雖然該圖層仍在視圖中,但可以通過按下切換按鈕暫停和恢復,並且這一切都可以正常工作。

唯一的問題是在[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是不這樣做的方式,但究竟是什麼?

在此先感謝。

回答

0

從其超級圖層中移除圖層不會導致圖層變爲零,這就是您的self.myLayer == nil檢查不起作用的原因。然而,你可以很容易地設置現場零,當你刪除它,如:

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

當然,如果你需要後重新添加它,那麼你就需要要麼重新分配層self.myLayer(如果你有一個引用它,你保持在其他地方)或從頭開始創建一個新的圖層實例。

+0

奧克發現另一種方式,所以它不會回到起始位置。 anim.removedOnCompletion = NO; anim.fillMode = kCAFillModeForwards;現在我甚至不必再檢查了。 – ivoos 2011-03-24 00:16:54