Как сказал Бен, вам нужно будет работать со слоем UIView, используя CATransform3D для выполнения вращения слоя. Хитрость для работы в перспективе, как описано здесь , заключается в прямом доступе к одной из ячеек матрицы CATransform3D (m34). Математическая математика никогда не была моей вещью, поэтому я не могу точно объяснить, почему это работает, но это работает. Вам нужно будет установить это значение в отрицательную дробь для вашего первоначального преобразования, а затем применить к нему преобразования вращения слоя. Вы также должны быть в состоянии сделать следующее:
UIView *myView = [[self subviews] objectAtIndex:0];
CALayer *layer = myView.layer;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -500;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0f * M_PI / 180.0f, 0.0f, 1.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;
, который восстанавливает преобразование слоя с нуля для каждого поворота.
Полный пример этого (с кодом) можно найти здесь , где я реализовал ротацию и масштабирование на основе касания для пары CALayers на основе примера Билла Дадни. Самая новая версия программы, в самом низу страницы, реализует такую перспективную операцию. Код должен быть достаточно простым для чтения.
ПодслойПреобразование, на которое вы ссылаетесь в своем ответе, является преобразованием, которое применяется к подуровням вашего UIView CALayer
. Если у вас нет подслоев, не беспокойтесь об этом. Я использую sublayerTransform в моем примере просто потому, что в одном вращающемся слое содержатся два слоя CALay.