CATransform3D 让我的 UITextView 消失?

CATransform3D making my UITextView disappear?

所以我有一个 UITextView,它应该在视觉上位于屏幕的底部边缘,然后向上和向后拉伸 "into" 屏幕,"Star Wars" 以爬行方式打开。

经过多次谷歌搜索等,我觉得我的代码看起来像是适合这项工作的代码……但是这并没有设置我正在寻找的透视图,而是让 UITextView 完全消失了!

文本视图在带有 springs/struts(无自动布局)的情节提要中设置,固定在主视图的顶部和底部,每边约 20 像素,弹簧处于活动状态在两个方向上。它的出口连接到 self.infoTextView。如果我不对它应用任何转换,它就会像我期望的那样显示。

但是当我在 viewDidLoad 中启动下面的代码时,文本视图就完全消失了。我确定我遗漏了什么,但我似乎无法弄清楚它是什么。

CGRect frame = self.infoTextView.layer.frame;
self.infoTextView.layer.anchorPoint = CGPointMake(.5f, 1.0f);
self.infoTextView.layer.frame = frame;

CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / 500;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 1.57, 0, 1, 0);
self.infoTextView.layer.transform = rotationAndPerspectiveTransform;

谢谢!

您需要在代码中修改两处:

  1. 旋转轴。您正在围绕 Y 轴旋转它。得到 效果你需要将旋转变换更改为 绕X轴旋转。
  2. 要获得 "Star Wars opening crawl-style" 效果,您需要设置负角度或负透视。

此外,您可能希望设置更 "strong" 的视角以获得更戏剧化的效果。

下面是一个基于您的转换代码的示例:

CGFloat angle = -45;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / 200;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, angle / 180.0 * M_PI, 1, 0, 0);
self.infoTextView.layer.transform = rotationAndPerspectiveTransform;