2010-06-28 14 views
2

我希望從其超級層中移除CALayer而無需動畫。這裏發生的是層動畫到一個位置,很好,當動畫停止時,這個代碼被執行,它將圖層返回到它的開始位置並淡出;大概會從超級玩家身上移除。如何停止動畫-removeFromSuperlayer?此處列出的代碼對所有包含註釋的變體都有相同的行爲,這些變體未被註釋並且未被註釋,交易或沒有交易。我錯過了什麼?無法禁用CALayer的動畫>> removeFromSuperlayer

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag 
{ 
    //[self setHidden: YES]; 

    //[CATransaction flush]; 
    [CATransaction begin]; 
    [CATransaction setValue:(id)kCFBooleanTrue 
        forKey:kCATransactionDisableActions]; 
    //[CATransaction setDisableActions: YES]; 
    //[CATransaction setAnimationDuration: 0]; 
    [self removeFromSuperlayer]; 
    [CATransaction commit]; 
} 

我一直在四處搜尋,而且這段代碼和我發現的沒有什麼不同。

回答

3

您可以通過設置行動禁止隱動畫字典上superlayer對所有涉及子層(類似於我的回答here)動畫返回null:

NSMutableDictionary *newActions = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[NSNull null], @"sublayers", nil]; 
superlayer.actions = newActions; 
[newActions release]; 

您可能還需要覆蓋層的(不超級玩家)onOrderOut行動,以防止這種情況。我展示瞭如何在鏈接的答案中做到這一點。

+0

非常好!到目前爲止,我不知道Actions,謝謝! 現在圖層不會返回到初始位置,並且漸變 - 現在只是暫時返回初始位置(如閃爍,添加了「子圖層」和「onOrderOut」)。我可以在這裏添加另一個問題,在動畫之後如何離開它們結束的圖層?再次感謝!〜(如果可以,請投票) – humasect 2010-06-29 00:11:57

+1

@humasect - 嘗試將動畫的fillMode設置爲kCAFillModeForwards,並將removedOnCompletion設置爲NO。 – 2010-06-29 02:38:42

+1

哇,這是一些工作後動畫刪除一些圖層!但我會認爲默認設置對於更常見的任務來說更好,而且這個功能完美無缺 - 謝謝! +1 – humasect 2010-06-29 03:39:46