2012-07-20 21 views
6

Empecé a usar CATransform3D últimamente y me parece muy agradable. Solo tengo 1 problema con la rotación. Estoy tratando de girar mi punto de vista de 360 ​​grados a la derecha, pero si acabo de poner a pasar 360 CATransform3DRotate no funcionaCATransform3DRotate rotate para 360 grados

Aquí está mi código (Simplemente no se mueve en absoluto.):

 CALayer *layer = dock.layer; 
     CATransform3D r = CATransform3DIdentity; 
     r.m34 = 1.0/-500; 
     r = CATransform3DRotate(r, DegreesToRadians(360.0f), 100.0f, 1.0f, 100.0f); 
     layer.transform = r; 

¿Alguien sabe cómo solucionar este problema? ¡Gracias por adelantado! :)

+0

¿Estás tratando de girar 180 o 360 grados ? Porque creo que girar 360 grados es lo mismo que no rotar en absoluto. – htinlinn

+0

@htinlinn Creo que está tratando de animar su capa a través de una rotación completa de 360 ​​grados. –

+0

@robmayoff ah. De acuerdo. – htinlinn

Respuesta

22

puede animar una capa a través de uno (o más) rotaciones completas alrededor de su eje Z por la animación de transform.rotation ruta de la clave de la capa, como este:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
animation.duration = .25; 
animation.fromValue = [NSNumber numberWithFloat:0]; 
animation.toValue = [NSNumber numberWithFloat:2 * M_PI]; 
[layer addAnimation:animation forKey:animation.keyPath]; 

puede animar alrededor de la X o ejes Y utilizando las rutas clave transform.rotation.x y transform.rotation.y. (La ruta de clave transform.rotation.z tiene el mismo efecto que la ruta de clave transform.rotation). Puede aplicar rotaciones múltiples, en ejes separados, simultáneamente.

Otra manera de hacerlo, lo que probablemente funciona mejor si se desea girar alrededor de un vector fuera del eje, es el uso de una animación de fotogramas clave, como esto:

CALayer *layer = [sender layer]; 
CATransform3D transform = CATransform3DIdentity; 
transform.m34 = 1.0/-50; 
layer.transform = transform; 

CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 
animation.values = [NSArray arrayWithObjects: 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 0 * M_PI/2, 100, 1, 100)], 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 1 * M_PI/2, 100, 1, 100)], 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 2 * M_PI/2, 100, 1, 100)], 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 3 * M_PI/2, 100, 1, 100)], 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 4 * M_PI/2, 100, 1, 100)], 
    nil]; 
animation.duration = 2; 
[layer addAnimation:animation forKey:animation.keyPath]; 
Cuestiones relacionadas