2013-04-03 67 views
0

我想放在一起有點像速度計一樣的動畫。核心動畫 - 在序列中播放2個動畫

的第一個動畫得到針

CFTimeInterval localMediaTime = [needle convertTime:CACurrentMediaTime() fromLayer:nil]; 

CABasicAnimation *needAni = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
needAni.duration = 0.5f; 
needAni.fromValue = [NSNumber numberWithFloat:0.0]; 
needAni.toValue = [NSNumber numberWithFloat:(rotVal * M_PI/180.0)]; 
needAni.timingFunction = [CAMediaTimingFunction functionWithControlPoints:0.195: 0.600: 0.790: 0.405]; 
needAni.fillMode = kCAFillModeBackwards; 

[needle.layer addAnimation:needAni forKey:nil]; 

後播放我想有針來回反彈了一點,當其達到全速。這個動畫的確如此:

CABasicAnimation *needAni2 = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
needAni2.duration = 0.1f; 
needAni2.fromValue = [NSNumber numberWithFloat:(rotVal * M_PI/180.0)]; 
needAni2.toValue = [NSNumber numberWithFloat:((rotVal+5) * M_PI/180.0)]; 
needAni2.fillMode = kCAFillModeBackwards; 
needAni2.autoreverses = YES; 
needAni2.repeatCount = HUGE_VAL; 
needAni2.beginTime = localMediaTime + 0.5f; 

[needle.layer addAnimation:needAni2 forKey:nil]; 

現在,當我把這一起只有第二個動畫播放。

我厭倦了將這兩個動畫放到一個組中,但我似乎無法重複第二個動畫,它重複了整個過程。如果我將組持續時間等於HUGE_VAL,還是有更好的方法來執行此操作,是否會出現性能問題?

感謝

回答

0

我想你可以堅持自己的方法,因爲這似乎是CAGroupAnimation的預期用途。只要確保你爲該組設定了適當的時間。如果您將該組的持續時間短於您的預期動畫,則會縮短您的動畫。如果您的持續時間超過您的動畫,則動畫對象可能會在內存中逗留,直到該持續時間結束。

另一種選擇是實現委託方法-animationDidStop:finished:,並在第一個動畫被調用時添加第二個動畫。

CAAnimation參考: https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CAAnimation_class/Introduction/Introduction.html#//apple_ref/occ/cl/CAAnimation

+0

思考這一點。我一直在閱讀,這是一種糟糕的形式。這有什麼道理嗎? – Imq 2013-04-03 23:05:41

+0

那麼,它應該在這種情況下工作得很好,但它有點icky ..如果沒有別的,它不是一個可以很好地擴展到更復雜的動畫的方法 – baris 2013-04-03 23:45:08