Como dijo Ben, deberá trabajar con la UIView'scapa, utilizando a CATransform3Dpara realizar la layer's rotation. El truco para que la perspectiva funcione, como se describe aquí , es acceder directamente a una de las matrices cellsde CATransform3D(m34). Las matemáticas de matriz nunca han sido lo mío, así que no puedo explicar exactamente por qué esto funciona, pero lo hace. Tendrá que establecer este valor en una fracción negativa para su transformación inicial, luego aplique las transformaciones de rotación de capa a eso. También debe poder hacer lo siguiente:
C objetivo
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;
Swift 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
}
que reconstruye la transformación de capa desde cero para cada rotación.
Puede encontrar un ejemplo completo de esto (con código) aquí , donde he implementado la rotación táctil y la escala en un par de CALayers, según un ejemplo de Bill Dudney. La última versión del programa, en la parte inferior de la página, implementa este tipo de operación en perspectiva. El código debe ser razonablemente simple de leer.
La sublayerTransformreferencia a la que hace referencia en su respuesta es una transformación que se aplica a las subcapas de su UIView's CALayer. Si no tienes subcapas, no te preocupes por eso. Utilizo sublayerTransform en mi ejemplo simplemente porque hay dos CALayerscontenidos dentro de la capa que estoy rotando.