2013-05-17 24 views
1

我動畫化的CALayer的不透明度屬性與下面的代碼:CALayer的CABasicAnimation鏈接

創建的方法動畫:

+ (CABasicAnimation *)fadeIn:(float)begin duration:(float)duration remove:(BOOL)remove{ 

    CABasicAnimation *fadeAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
    fadeAnimation.fromValue = [NSNumber numberWithFloat:0.0]; 
    fadeAnimation.toValue = [NSNumber numberWithFloat:1.0]; 
    fadeAnimation.additive = NO; 
    fadeAnimation.removedOnCompletion = remove; 
    fadeAnimation.beginTime = begin; 
    fadeAnimation.duration = duration; 
    fadeAnimation.fillMode = kCAFillModeBoth; 

    return fadeAnimation; 
} 

添加動畫層:

[overlayLayer addAnimation:[VideoComposerHelpers fadeIn:1.0 duration:0.5 remove:NO] forKey:nil]; 

這是工作完美。但是,現在我想在第一個動畫完成之後,向同一圖層添加另一個動畫。

[overlayLayer addAnimation:[VideoComposerHelpers fadeOut:1.5 duration:0.5 remove:NO] forKey:nil]; // fadeOut is a method similar to fadeIn 

應該發生的事情是,圖層淡入持續時間爲0.5,然後淡出持續時間爲0.5。 雖然這似乎不起作用。是否因爲第二個動畫的起始點與第一個動畫的起點相同?

回答

6

您應該使用CAAnimationGroup是這樣的:

CABasicAnimation *fadeIn = [VideoComposerHelpers fadeIn:1.0 duration:0.5 remove:NO]; 
CABasicAnimation *fadeOut = [VideoComposerHelpers fadeOut:1.5 duration:0.5 remove:NO]; 

CAAnimationGroup *group = [CAAnimationGroup animation]; 
group.fillMode = kCAFillModeForwards; 
group.removedOnCompletion = NO; 
[group setAnimations:[NSArray arrayWithObjects:fadeIn, fadeOut, nil]]; 
group.duration = 2; 
[overlayLayer addAnimation:group forKey:@"savingAnimation"]; 

而且我不知道如果我得到正確的價值觀VOR開始,結束,動畫的持續時間(你應該檢查他們):)) 。

+0

很高興我能幫助,我希望那個投下了贊成票的人也許在我的回答中出錯了(無論如何,我只是複製粘貼一段我的運行代碼,然後根據需要進行調整),所以基本上它應該是一個好的答案:)) – danypata

1

CABasicAnimation可以有一個委託。代表將發送animationDidStop:finished:。現在你可以要求鏈中的下一個動畫。

就你而言,你甚至不需要那個;只需使用動畫autoreverses爲YES。

(呵呵,也removedOnCompletionfillMode;這是絕對錯誤的,並使用這些例子都同樣是錯誤的,他們只需要在中間的複雜組合動畫)

+0

以下是我的書中關於CABasicAnimation的部分,下一部分將告訴您如何正確使用它:http://www.apeth.com/iOSBook/ch17.html#_cabasicanimation_and_its_inheritance – matt

+0

不知道如果這真的是我想要的。目標實際上是在一段時間內多次添加淡入/淡出。不過,我可以將提示點作爲動畫添加到圖層,但似乎並非如此 – Swissdude