2011-12-13 84 views
2

我有一個UIView,我試着動畫翻轉下來,同時讓它的軸位於視圖的底部。例如:iOS UIView動畫CATransform3DMakeRotation混淆

enter image description here

要做到這一點,我想使用一個UIView動畫:現在它不工作我多麼希望

[UIView animateWithDuration:3 delay:0 options:UIViewAnimationCurveEaseOut animations:^{ 

    // Flip Down 
    top3.layer.anchorPoint = CGPointMake(0.5, 1.0); 
    top3.layer.transform = CATransform3DMakeRotation(M_PI, 1, 0, 0); 

} completion:^(BOOL finished) { 

    // Reset? 
    //top3.transform = CGAffineTransformMakeScale(1, 1); 

}]; 

,好像認爲是AWAY動畫從用戶而非朝向。如我的圖片所示,它似乎沒有給出3D效果,使其在旋轉時看起來更貼近用戶。我確信這是因爲我不瞭解如何使用CATransform3DMakeRotation

問題:

  • 我怎樣才能使視圖看起來更接近,因爲它降低了用戶?比如像我的圖像示例那樣傾斜它?
  • 當我設置我的anchorPoint它將我的視圖向下移動,我如何防止這種情況並仍然設置我的anchorPoint
  • 使用UIView動畫,我可以使用寬鬆設置嗎?在選項中使用了UIViewAnimationCurveEaseOut
  • 我可以使用重力設置嗎?
+2

`M_PI/2` = = 90度。應該回答你的中途停止一半開始 – 2011-12-13 18:36:13

+0

謝謝,我解決了在我的問題和測試,它的工作原理。但我仍然有其餘的問題。 – 2011-12-13 18:38:43

回答

2
  • 這不是從你的問題完全清楚,但它聽起來像你不是動畫視圖的停留期間長方形看到了透視變形,因爲它旋轉,對不對? CALayer要透視顯示,其transform需要設置m34元素,如here所述。
  • 要補償移動視圖圖層的anchorPoint,您需要更改視圖的原始位置。
  • 是的。除了您正在使用的選項之外,還有幾個動畫選項,您可以像這樣組合它們(例如):UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction。核心動畫並沒有真正的物理概念。根據你所要達到的效果,你可以通過將多個動畫鏈接在特定的緩動設置中來實現它 - 例如,一個落在堅實表面上的落下物體將在下來時使用「緩入」動畫,然後是「緩和」,如果它然後反彈回來。