2011-12-23 89 views
0

我正在制作一个应用程序,我需要转换图像,并且图像可以放置在视图中的任何位置。但我当我使用下面的代码做透视变换面临的问题为什么我的3D旋转图像与其他图像相交?

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图像上方。

这是怎么发生的?

回答

2

如果两个CALayers是兄弟姐妹,它们存在于相同的3-D空间中。当你像上面那样旋转一层时(我猜你从my older answer中抽取了,虽然没有该代码的透视部分),但是你可以这样做它的锚点。

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

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

另一种可能性是将您希望位于旋转图层前面的图层放置为旋转图层的超级图层的同胞。在任何三维定位兄弟图层之前,首先遵循图层层次结构。

+0

耶非常感谢您的澄清:-) – iphonic 2011-12-27 06:30:58