iOS UIView动画CATransform3DMakeRotation混乱

我有一个UIView ,我试图动画向下翻转,同时让它的轴在视图的底部。 例如:

在此处输入图像描述

为此,我尝试使用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); }]; 

现在它不是我想要的工作,看起来这个视图是从用户那里动画而不是朝向。 如图所示,它似乎不会产生3D效果,使其在向下旋转时看起来更贴近用户。 我很肯定这是因为我对如何使用CATransform3DMakeRotation缺乏了解。

问题:

  • 如何在视图下降时让视图看起来更贴近用户? 如在我的图像示例中倾斜它?
  • 当我设置我的anchorPoint它会将我的视图向下移动,如何防止这种情况并仍设置我的anchorPoint
  • 使用UIView动画,我可以使用缓动设置吗? 在选项中使用了UIViewAnimationCurveEaseOut
  • 我可以使用重力设置吗?

  • 你的问题并不完全清楚,但听起来你在动画过程中没有看到透视扭曲 – 视图在旋转时保持矩形,对吧? 要使CALayer以透视方式显示,其transform需要设置m34元素,如此处所述。
  • 要补偿anchorPoint移动视图的图层,您需要更改视图的原始位置。
  • 是。 除了你正在使用的动画选项之外,还有几个动画选项,你可以像这样组合它们(例如): UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction
  • 核心动画并没有任何物理概念。 根据您的效果,您可以通过将多个动画与特定的缓动设置链接在一起来实现它 – 例如,击中固体表面的坠落物体将在向下的过程中使用“缓入”动画,然后是如果它然后反弹回来“放松”。