iOS UIView动画CATransform3DMakeRotation混淆

问题描述:

我有一个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

  • 这不是从你的问题完全清楚,但它听起来像你不是动画视图的停留期间长方形看到了透视变形,因为它旋转,对不对? CALayer要透视显示,其transform需要设置m34元素,如here所述。
  • 要补偿移动视图图层的anchorPoint,您需要更改视图的原始位置。
  • 是的。除了您正在使用的选项之外,还有几个动画选项,您可以像这样组合它们(例如):UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction。核心动画并没有真正的物理概念。根据你所要达到的效果,你可以通过将多个动画链接在特定的缓动设置中来实现它 - 例如,一个落在坚实表面上的落下物体将在下来时使用“缓入”动画,然后是“缓和”,如果它然后反弹回来。