2012-03-14 13 views
11

Tengo un programa en el que un CALayer debe girarse a cierto valor. ¿Cómo puedo determinar la rotación actual de un CALayer? Tengo un UIRotationGestureRecognizer que gira la capa:Determinar cuánto ha girado un CALayer

- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer 
{ 
    if (gestureRecognizer == rotationGestureRecognizer) { 
     NSLog(@"gestureRecRotation: %f", rotationGestureRecognizer.rotation); 
     CATransform3D current = _baseLayer.transform; 
     _baseLayer.transform = CATransform3DRotate(current, rotationGestureRecognizer.rotation * M_PI/180, 0, 0, 1.0); 
    } 
} 

comienzo con una capa que tiene que ser girado una cierta cantidad para adaptarse a un rompecabezas. Entonces, ¿cómo obtengo la rotación actual de la capa?

Respuesta

20

Usted puede hacer los cálculos y obtener el ángulo de la siguiente manera:

CATransform3D transform = _baseLayer.transform; 
CGFloat angle = atan2(transform.m12, transform.m11); 

pero es más fácil de hacer de la siguiente manera:

CGFloat angle = [(NSNumber *)[_baseLayer valueForKeyPath:@"transform.rotation.z"] floatValue]; 

Desde el documentation:

Core Animation extiende el protocolo de codificación de valores-clave a Permiten obtener y establecer los valores comunes de la matriz CATransform3D de una capa a través de las rutas clave. La Tabla 4 describe las rutas clave para las que las propiedades transform y sublayerTransform de una capa son clave-valor de codificación y observación conforme

+0

Gracias por la respuesta, – KaasCoder

Cuestiones relacionadas