Перспективное преобразование CALayer
Мы можем добиться прекрасных результатов путем 3D-преобразования CALayer по различным осям. Выглядит хорошо, но мы можем сделать его еще лучше, добавив к трансформации перспективу.
Обычно CATransform3D действует так, как будто он находится в 2D-пространстве. давайте анимируем CALayer по оси Y, чтобы увидеть, о чем я говорю:

Выглядит хорошо. Однако вот в чем проблема. Возьмите карту или любой объект, напоминающий CALayer, который мы анимировали, и поверните его на 180 градусов по оси Y, удерживая его параллельно своим глазам. Видите разницу?
В реальном мире слоистый объект останется плоским, и мы будем воспринимать его как прямоугольник. Когда слой начнет вращаться, один край приблизится к нашим глазам, и мы почувствуем, что этот край больше другого. Наконец, когда анимация завершится, мы снова будем воспринимать слой как плоский прямоугольник.
К сожалению, здесь этого не происходит. Чтобы он выглядел как реальный объект, нам нужно создать объект CATransform3D и установить его свойство m34.
Тот же код, что и раньше, но на этот раз мы изменили свойство m34. Вы можете поиграть со значением, чтобы получить желаемый результат. Установка большего делителя уменьшит эффект перспективы.
Вот получившаяся анимация:

Бонус:
Посмотрите на верхний и нижний края. Они не гладкие. Чтобы сделать их плавными, измените свойство слоя «shouldRasterize» на true и установите масштаб «rasterizationScale» на масштаб устройства.
