我正在创建一个需要转换图像的应用程序,图像可以放在视图中的任何位置。但是当我使用下面的代码进行透视转换时我遇到的问题
CATransform3D rotationAndPerspectiveTransform = self.layer.transform;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 22.5f * M_PI / 180.0f, 0, 1, 0.0f);
self.layer.transform = rotationAndPerspectiveTransform;
它完美地工作,但是当我尝试在“透视变换”图像(3D)上放置2D图像时,2D图像与3D图像相交。它不会出现在3D图像上方。
为什么会这样?
答案 0 :(得分:2)
如果两个CALayer是兄弟姐妹,则它们存在于相同的3-D空间中。当您像上面那样旋转一个图层时(我猜你是从my older answer绘制的,虽然没有该代码的透视部分),但是你会对它的锚点这样做。
默认情况下,该锚点是图层的中心,因此该图层由0 Z平面分割。其中一半低于0,一半低于0。
当您创建一个新图层作为原始图层的兄弟图层时,它将位于Z坐标0处,因此将与旋转图层的中心相交。要将该图层置于现有图层之上,您可以将新图层的zPosition
属性设置为足够大的正面(或者可能为负值,我不断将其混淆)值,以使整个图层悬停在旋转一个。
另一种可能性是将您希望的图层放在旋转图层的前面,作为旋转图层的超级图层的兄弟。在兄弟层的任何三维定位之前,首先遵循层次结构。