2012-07-20 18 views
6

Ho iniziato a utilizzare CATransform3D ultimamente e sembra molto bello. Ho solo 1 problema con la rotazione però. Sto cercando di ruotare mio punto di vista di 360 gradi verso destra, ma se ho appena messo passare 360 ​​per CATransform3DRotate esso non funzionaCATransform3DRotate ruota per 360 gradi

Ecco il mio codice (Semplicemente non si muove affatto.):

 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; 

Qualcuno sa come risolvere questo problema? Grazie in anticipo! :)

+0

Stai cercando di ruotare di 180 o 360 gradi ? Perché penso che ruotare di 360 gradi sia lo stesso di non ruotare affatto. – htinlinn

+0

@htinlinn Penso che stia cercando di animare il suo livello attraverso una rotazione completa di 360 gradi. –

+0

@robmayoff ah. ok. – htinlinn

risposta

22

È possibile animare un livello attraverso uno (o più) rotazioni complete attorno al proprio asse Z da animare transform.rotation percorso di chiave del livello, come questo:

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]; 

è possibile animare intorno al X o assi Y utilizzando i percorsi chiave transform.rotation.x e transform.rotation.y. (Il percorso chiave transform.rotation.z ha lo stesso effetto del percorso chiave transform.rotation.) È possibile applicare più rotazioni, su assi separati, contemporaneamente.

Un altro modo per farlo, che probabilmente funziona meglio se si desidera ruotare attorno ad un vettore di fuori asse, sta utilizzando un'animazione fotogramma chiave, in questo modo:

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]; 
Problemi correlati