2013-05-17 43 views
0

我已經創建了執行以下一個3D立方體視圖轉變:有沒有辦法用關鍵點做3D轉換?

  • 創建層容器。
  • 在2D空間中添加當前視圖。
  • 向右側添加下一個視圖並旋轉90度(如在立方體中)
  • 執行動畫以旋轉立方體。

下面是該代碼 - 它的工作的罰款。 。 。以下實際問題:

- (CAAnimation*)makeRotationWithMetrics:(BBRotationMetrics*)metrics 
{ 
    [CATransaction flush]; 
    CAAnimationGroup* group = [CAAnimationGroup animation]; 
    group.delegate = self; 
    group.duration = metrics.duration; 
    group.fillMode = kCAFillModeForwards; 
    group.removedOnCompletion = NO; 
    group.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 

    CABasicAnimation* translationX = [CABasicAnimation animationWithKeyPath:@"sublayerTransform.translation.x"]; 
    translationX.toValue = metrics.translationPointsX; 
    CABasicAnimation* rotation = [CABasicAnimation animationWithKeyPath:@"sublayerTransform.rotation.y"]; 
    rotation.toValue = metrics.radians; 

    CABasicAnimation* translationZ = [CABasicAnimation animationWithKeyPath:@"sublayerTransform.translation.z"]; 
    translationZ.toValue = metrics.translationPointsZ; 
    group.animations = [NSArray arrayWithObjects:rotation, translationX, translationZ, nil]; 

    return group; 
} 

在動畫的最後,我想執行輕搖,彷彿立方體也安裝在彈簧上。我試過播放一系列動畫來繞Y軸旋轉,逐漸衰減。

我已經建立了一系列動畫製作,但每個那些從原點開始,而不是最後一點層得。 。 。我該如何解決這個問題?一種方法是設置層先上變換分析,

但是,有沒有辦法做到3D與關鍵點轉變?

回答

1

這聽起來好像你正在尋找CAKeyframeAnimation。不是指定toValue的傳遞的values和任選keyTimes陣列包括開始和結束值。

從原點問題的開始來自使用removedOnCompletion。通過這樣做,您可以在演示文稿(屏幕上顯示的內容)和模型(圖層的屬性值)之間引入差異。更清晰的方法是顯式設置結束值並將動畫從前一個值設置爲結束值。當動畫結束時,這會讓你處於乾淨狀態。

+0

謝謝大衛。 。 。 CAKeyFrameAnimation可以用於3D變換嗎?你指定的值是什麼? 。 。關於從起點開始,你的意思是我應該避免設置該屬性? (我將它設置爲NO) –

+0

Ahh - 我看到了如何使用3D轉換和旋轉的關鍵幀動畫 - 現在嘗試。 –

+0

好的 - 如果我將最後一個值保存爲值,我仍然可以按照我的方式進行。 。 。但關鍵幀無疑會更好。 –

相關問題