iphone - 为什么我的 3D 旋转图像与另一幅图像相交?

标签 iphone ios drawing core-animation

我正在制作一个需要转换图像的应用程序,图像可以放置在 View 中的任何位置。但是我在使用下面的代码进行透视变换时遇到的问题

CATransform3D rotationAndPerspectiveTransform = self.layer.transform;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 22.5f * M_PI / 180.0f, 0, 1, 0.0f);
self.layer.transform = rotationAndPerspectiveTransform;

效果很好,但是当我尝试将 2D 图像放置在“透视变换”图像 (3D) 上时,2D 图像与 3D 图像相交。它不会出现在 3D 图像上方。

为什么会这样?

最佳答案

如果两个 CALayer 是兄弟,则它们存在于同一个 3-D 空间中。当你像上面那样旋转一层时(我猜你是从 my older answer 中提取的,尽管没有该代码的透视部分),你这样做是关于它的 anchor 。

默认情况下,该 anchor 是图层的中心,因此该图层被 0 Z 平面分割。其中一半低于 0,一半高于 0。

当您创建一个新图层作为原始图层的同级图层时,它位于 Z 坐标 0 处,因此将与旋转图层的中心相交。要将该层放置在现有层之上,您可以将新层的 zPosition 属性设置为足够大的正值(或可能为负值,我一直把它搞混了)以拥有整个层将鼠标悬停在旋转的上方。

另一种可能性是将您希望位于旋转层之前的层作为旋转层超层的兄弟层。在兄弟层的任何 3-D 定位之前,首先遵循层层次结构。

关于iphone - 为什么我的 3D 旋转图像与另一幅图像相交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8615783/

相关文章:

HTML5 Canvas - alpha 值较低的 strip ?

iphone - UIWebView 上具有大图像尺寸的 img src 需要时间加载,有时会崩溃

iphone - iPhone 中同时播放 2 个 mp3 声音?

ios - 在下次运行之前以后台模式关闭应用程序

ios - Swift CVCalendar 不更新 monthLabel

iphone - 在插入 iPhone 的 SQLite 数据库之前检查数据是否存在

java - onDraw 方法之外的旋转路径

javascript - 如何绘制一个低不透明度的 rgba 圆,其中心恰好位于给定的 X 和 Y 尺寸

iphone - UIDatePicker 返回错误的 NSDate

ios - Xcode:签名说 "No accounts found",但帐户说它存在