CATransform3D让我的UITextView消失了吗?

时间:2015-05-23 03:27:29

标签: ios objective-c core-animation catransform3d

所以我有一个UITextView,它应该在视觉上坐在屏幕的底部边缘,然后向上和向后伸展到“屏幕”,“星球大战”开启爬行式。

经过大量谷歌搜索后,我觉得我的工作看起来像是正确的代码......但是我没有设置我想要的透视图,这只是让UITextView完全消失了!

文本视图设置在带有弹簧/支柱(无自动布局)的故事板中,使其固定在主视图的顶部和底部,每侧大约20px,并且弹簧在两个方向都有效。它的出口连接到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 个答案:

答案 0 :(得分:1)

您需要在代码中修改两件事:

  1. 旋转轴。你是围绕Y轴旋转它。得到的 效果你需要将旋转变换更改为 转过X轴。
  2. 要获得“星球大战开启爬行式”效果,您需要设置负角度或负视角。
  3. 此外,您可能希望设置一个更“强大”的视角来实现更具戏剧性的效果。

    以下是基于转换代码的示例:

    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;