旋转视图边缘的 CATransform3D 深度

Posted

技术标签:

【中文标题】旋转视图边缘的 CATransform3D 深度【英文标题】:CATransform3D depth on edge of view that is rotated 【发布时间】:2011-12-18 23:07:51 【问题描述】:

我有一个旋转的 UIImageView。当它旋转到与用户成 90° 的点时,很明显视图没有任何深度。就像以 90° 的角度看一张纸。

我正在使用:

// Rotate

CATransform3D rotationAndPerspectiveTransform2 = CATransform3DIdentity;
rotationAndPerspectiveTransform2.m34 = 1.0 / -400;
rotationAndPerspectiveTransform2 = CATransform3DRotate(rotationAndPerspectiveTransform2, M_PI, 1.0f, 0.0f, 0.0f);

如何为我的视图添加一些深度,以便当它达到 90° 时,它的边缘更像 3D 对象而不是平面视图?

【问题讨论】:

+1 好问题。我一直想知道,在 iBooks 中翻到 iBooks Store 时,Apple 是如何做到这一点的。 是的,我看到了这种效果的再现,但太可怕了,视角非常偏离。 就在我的脑海中,这可能需要两层。侧面图层将从 90° 变换开始并动画到 0° 或 180°,而图层上的面则以相同的速率进行完全相反的操作。将该转换与沿 x 轴的平移相结合,可能会令人信服。 这听起来确实不是万无一失的。一定有办法挤出一层。 【参考方案1】:

您可以通过将它们放置在 3D 空间中来在 CA 中设置 3D 层树,每边一层。因此,一个 3D 旋转立方体将有 6 层;每张脸一个。

如果您将所有这些层设为 CATransformLayer (T) 的子层,则可以对 T 应用单个变换,例如,在 3D 空间中旋转整个结构。

没有办法“挤出”一个 CALayer。

【讨论】:

以上是关于旋转视图边缘的 CATransform3D 深度的主要内容,如果未能解决你的问题,请参考以下文章

应用 CATransform3D 后的近似矩形?

转 CATransform3D 矩阵变换之立方体旋转实现细节

为啥使用 CATransform3D 进行这种转换会减小视图的宽度?

3D 动画 - CABasicAnimation 和 CATransform3D 提供视图之间的差距

旋转时在屏幕的所有边缘对齐可组合项

我应该如何将 OpenGL 模型视图转换为 CATransform3D?