2011-05-26 71 views
1

我正在處理顯示核心動畫圖層網格的視圖。當我刪除圖層時,我希望該圖層淡出並讓其他圖層移動以填補空白。這幾乎符合我希望使用隱式動畫的方式。唯一的問題是,當這些圖層的副本移動到新位置時,應該移動的圖層淡出。我如何改變這種行爲,讓圖層移動而不是移動和淡入?CoreAnimation淡出圖層並移動副本而不是僅移動圖層

要刪除的單層我只是做[theLayer removeFromSuperLayer],然後調用它做這個容器層上我的佈局例行:

CGFloat x = 0; 
CGFloat y = CGRectGetMaxY([layer bounds]) - buttonHeight - buttonVPadding; 
for (CALayer *l in [layer sublayers]) { 
    if ([layer bounds].size.width < x + buttonWidth) { 
     x = 0; 
     y -= buttonHeight + buttonVPadding; 
    } 
    CGRect bounds = CGRectMake(0, 0, buttonWidth, buttonHeight); 
    [l setBounds: bounds]; 
    [l setPosition: CGPointMake(x, y)]; 
    x += buttonWidth + buttonVPadding; 
} 

我試圖重寫在- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event;默認的動畫行爲,但我無法找到要重寫哪些事件以獲得所需的行爲。

回答

0

輸入此問題後,我想了解更多關於該問題的信息,我找到了解決方法或解決方法。我不是直接刪除圖層,而是將其設置爲隱藏並跳過佈局循環中的隱藏圖層。然後在所有動畫完成後(在我的CATransaction的完成塊中),我移除所有隱藏的圖層,而不使用動畫。

0

就我所瞭解的CAAnimation而言,關鍵參數標識了您正在動畫的CALayer屬性。在你的情況下,這應該是界限和地位。

因爲您要移除一個圖層,所以整體而言,您還要修改子圖層屬性。

所以這三個關鍵是你必須玩的。

另一方面,通過定義您的委託actionForKey,您應該有機會了解調用此方法的哪些鍵。或者您可以檢查CALayer中的動作字典。但我不知道它是否有幫助。