Як сказав Бен, вам потрібно буде працювати з 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
в одному шарі, який я обертаю, є два .