2012-07-20 29 views
4

我在視圖之間創建了自己的過渡動畫。我爲兩個屬性(位置和變換)設置動畫,以在視圖之間提供類似立方體的過渡。該框架使用CABasicAnimation,而轉換使用「2階段」CAKeyframeAnimation。一切工作正常,除了一個小細節,我似乎無法弄清楚。在我的轉換中,我在中間關鍵幀上應用CATransform3DScale以創建放大/縮小效果。這工作正常,除了動畫看起來有點生澀。它以線性方式在關鍵幀之間進行動畫處理,並且我想將其解決。現在CAKeyframeAnimation有一種方法可以使用calculationMode來實現,但它似乎不適用於轉換。我嘗試將其設置爲kCAAnimationCubickCAAnimationCubicPaced,但沒有任何效果。用於CATransform3D動畫的CAKeyframeAnimation上的平滑動畫

下面是動畫一個視圖的變換代碼(一個類似的代碼塊動畫其它視圖):

CAKeyframeAnimation *aTransform = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 
    CATransform3D transform1 = RotateOnX(toView, M_PI_4); 
    transform1 = CATransform3DScale(transform1, RotationalZoom, RotationalZoom, RotationalZoom); 
    [aTransform setValues:Array([NSValue valueWithCATransform3D:RotateOnX(toView, M_PI_2)], 
           [NSValue valueWithCATransform3D:transform1], 
           [NSValue valueWithCATransform3D:RotateOnX(toView, 0)])]; 
    [toView.layer addAnimation:aTransform forKey:@"transform"]; 

注:RotateOnX(UIView *, CGFloat)是用於返回一個視圖的變換塊由X上旋轉所需的弧度。

正如你所看到的,我只對中間關鍵幀設置了縮放轉換。此外,視圖的旋轉非常平滑,只是縮放似乎在改變方向時「猛拉」。

有沒有人有關於如何平滑縮放/縮放的任何想法?

+0

添加多個關鍵幀? – 2012-07-20 21:46:35

回答

3

嘗試timingFunctions屬性。因爲你有3個關鍵幀,則需要2定時功能:一個用於從關鍵幀0動畫設置關鍵幀1,而另一個用於從關鍵幀1動畫以關鍵幀2

aTransform.timingFunctions = [NSArray arrayWithObjects: 
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInOut], 
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInOut], 
    nil]; 
+0

對不起,我不清楚......我用一個「框架」來捕捉所有的邊界,anchorPoint和位置。實際上,我確實只是通過修改錨點來動畫化位置,以「移動」我的視圖。我會更新我的問題以澄清。 – 2012-07-20 21:28:25

+0

我改變了我的答案。 – 2012-07-20 21:44:27

+0

哦,聖哇...我完全錯過了,我在6個小時內至少看了10次這些課文......呃。它完美的作品。真的,謝謝你! – 2012-07-20 23:48:25