Понимание CATransform3DRotate / CATransform3DMakeRotation

Я пытаюсь понять, как создать глубину, восприимчивую к моему UIView как это:

введите описание изображения здесь

Я пробовал этот код:

var rotationWithPerspective = CATransform3DIdentity;
rotationWithPerspective.m34 = -1.0/500.0/2/2
rotationWithPerspective = CATransform3DRotate(rotationWithPerspective, 22.5, 0, 1, 0);
preview.layer.transform = rotationWithPerspective

который генерирует перспективу. Тем не менее, он переворачивает представление по какой-то причине.

1) Как я могу избежать "переворачивания" после преобразования?

2) Будет ли "перспективная глубина", полученная в результате преобразования, одинаковой для каждого заданного UIViewили это зависит от UIView размер и т. д.?

Благодарю вас!

2 ответа

Решение

CATransform3DRotate ожидает радианы не градусы. Вы вращаетесь на 22,5 радиана, что похоже на 1200 градусов. Наверное, поэтому ваше изображение перевернуто. Вы, вероятно, хотите использовать это:

let radians = 22.5 * M_PI / 180
rotationWithPerspective = CATransform3DRotate(rotationWithPerspective, radians, 0, 1, 0);

За 2)

  • Это за UIView.
  • Если вы хотите применить к подслоям, вы можете использовать sublayerTransform. Например, preview.layer.sublayerTransform = вращение с учетом

Вы можете прочитать больше об этом в iOS Core Animation - Advanced Techniques от Ника Локвуда. Надеюсь, что поможет.

Другие вопросы по тегам