Як сказав Бен, вам потрібно буде працювати з UIView'sшаром, використовуючи a CATransform3Dдля виконання layer's rotation. Хитрість , щоб отримати перспективну роботу, так як описано тут , є безпосередньо доступ до одного з матриці cellsз 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;
Швидкий 5.0
if let myView = self.subviews.first {
let layer = myView.layer
var rotationAndPerspectiveTransform = CATransform3DIdentity
rotationAndPerspectiveTransform.m34 = 1.0 / -500
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0 * .pi / 180.0, 0.0, 1.0, 0.0)
layer.transform = rotationAndPerspectiveTransform
}
який відновлює перетворення шару з нуля для кожного обертання.
Повний приклад цього (з кодом) можна знайти тут , де я здійснив обертання та масштабування на основі дотику CALayersна основі прикладу Білла Дадні. Найновіша версія програми в самому нижній частині сторінки реалізує такий вид перспективних операцій. Код повинен бути досить простим для читання.
sublayerTransformВи посилаєтеся у вашій відповіді є перетворення , яке застосовується до подслоя з ваших UIView's CALayer. Якщо у вас немає підшарів, не переживайте про це. Я використовую sublayerTransform у своєму прикладі просто тому, що CALayersв одному шарі, який я обертаю, є два .