Почему мое трехмерное повернутое изображение пересекается с другим изображением? - PullRequest
0 голосов
/ 23 декабря 2011

Я делаю приложение, в котором мне нужно преобразовать изображения, и изображения могут быть размещены в любом месте вида.Но проблема, с которой я сталкиваюсь, когда я делаю перспективное преобразование, используя приведенный ниже код

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изображение пересекает трехмерное изображение.Он не отображается над трехмерным изображением.

Почему это происходит?

1 Ответ

2 голосов
/ 25 декабря 2011

Если два CALayers являются братьями и сестрами, они существуют в одном и том же трехмерном пространстве.Когда вы поворачиваете один слой, как вы делали выше (который, как я полагаю, вы нарисовали из моего более старого ответа , хотя и без перспективной части этого кода), вы делаете это относительно его точки привязки.

По умолчанию эта точка привязки является центром слоя, поэтому слой разделяется на плоскость 0 Z.Половина этого значения ниже 0, а половина выше 0.

Когда вы создаете новый слой в качестве родственного элемента исходного слоя, он располагается с координатой Z, равной 0, и, таким образом, будет пересекать центр вашего повернутого слоя.,Чтобы поместить этот слой выше существующего, вы можете установить для свойства zPosition нового слоя достаточно большое положительное (или, возможно, отрицательное, я все время путаю) значение, чтобы весь слой завис над повернутым слоем..

Другая возможность состоит в том, чтобы поместить слой, в котором вы хотите находиться, перед повернутым слоем в качестве родственного элемента суперслоя повернутого слоя.Сначала следует соблюдать иерархию слоев перед любым трехмерным позиционированием родственных слоев.

...