Como dijo Ben, deberá trabajar con la UIView's
capa, utilizando a CATransform3D
para realizar la layer's
rotation
. El truco para que la perspectiva funcione, como se describe aquí , es acceder directamente a una de las matrices cells
de 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 sublayerTransform
referencia 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 CALayers
contenidos dentro de la capa que estoy rotando.