2009-08-27 17 views
3

隱含的事情表現良好。但是,當我嘗試使用顯式動畫在單個圖層上執行多個動畫(例如不透明度和平移)時,我會得到奇怪的結果。CALayer顯式動畫不能正常工作

首先,我嘗試使用CATransaction。然後我切換到CAAnimationGroup。兩者似乎都沒有得到我想要的。

我想要什麼? 我只需要一層圖層從一個點移動到另一個圖層,並使用初始不透明度和目標不透明度。而已!

我在看什麼? 下面是一個例子...

當執行交易開始/提交時,翻譯看起來是正確的,但不透明度不是。我的開始不透明度爲0,目標不透明度爲0.5。 但是當我運行動畫時,它會混合到0.5,但隨後會「捕捉」到1.0(完全不透明)。

我試着將removedOnCompletion設置爲NO。但那也沒有幫助。 我認爲底線是我需要知道AnimationGroup和Transaction之間的區別。

有人可以解釋這一點,可能是什麼即時看到我的動畫奇怪?

謝謝!

+0

您應該可以通過設置圖層的alpha值和位置屬性來隱式設置這些屬性的動畫效果。聽起來像你在正確的軌道上。將它們堆疊在一起進行CATransaction begin/commit,它們將以原子方式動畫化。如果無法正常工作,請發佈您的代碼。 – 2009-08-27 10:26:04

+0

隱式動畫工作,但id喜歡明確創建它們,當動畫完成時我可以處理完成的事件。 – AlvinfromDiaspar 2009-08-28 05:28:25

回答

1

好吧,明確的動畫不適合我。 我曾嘗試爲不透明度(一層)創建基本動畫。我把它放在一個動畫組裏面。當我執行時,沒有任何反應。爲了簡單起見,我拿出了翻譯動畫。這只是試圖做不透明的動畫。

CAAnimationGroup *group = [CAAnimationGroup animation]; 

CABasicAnimation *opacityAnimation;  
opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
opacityAnimation.fromValue = [NSNumber numberWithDouble:fromalpha];  
opacityAnimation.toValue = [NSNumber numberWithDouble:toalpha];  
opacityAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; 
opacityAnimation.delegate = self; 
opacityAnimation.duration = 2.7;   

opacityAnimation.removedOnCompletion = NO; 

group.animations = [NSArray arrayWithObjects: opacityAnimation, nil]; 
[baseLayer addAnimation:group forKey:@"groupAnim"]; 
+0

嘗試添加: opacityAnimation.fillMode = kCAFillModeForwards; 此外,如果您選擇您的代碼並單擊工具欄中的代碼小部件,它將格式正確。 – 2009-09-04 23:45:01

0

您必須在顯式動畫中將圖層不透明度設置爲動畫後的值。

layer.opacity=0.0f;