iOS UIView动画CATransform3DMakeRotation混乱

时间:2011-12-13 18:21:52

标签: ios uiview 3d core-animation uiviewanimation

我有一个UIView,我试图动画向下翻转,同时让它的轴位于视图的底部。 E.g:

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);

 }];

现在它不按照我想要的方式运行,看起来这个视图正在向用户设置动画而不是向用户动画。它似乎没有给出一种3D效果,使其在向下旋转时看起来更贴近用户,如我的图像所示。我很肯定这是因为我对如何使用CATransform3DMakeRotation缺乏了解。

问题:

  • 如何在视图下降时让视图更贴近用户?比如在我的图像示例中将其倾斜?
  • 当我设置anchorPoint时,它会将我的视图向下移动,如何阻止此操作并仍设置anchorPoint
  • 使用UIView动画,我可以使用缓动设置吗?在选项中使用UIViewAnimationCurveEaseOut
  • 我可以使用重力设置吗?

1 个答案:

答案 0 :(得分:2)

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