2012-07-20 8 views
6

ich angefangen habe mit CATransform3D in letzter Zeit, und es scheint sehr schön. Ich habe nur ein Problem mit der Rotation. Ich versuche, meine Ansicht für 360˚ Grad nach rechts zu drehen, aber wenn ich es nur 360 setzen passieren CATransform3DRotate funktioniert nichtCATransform3DRotate dreht um 360 Grad

Hier ist mein Code (Es ist einfach überhaupt nicht bewegen.):

 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; 

Wer weiß, wie dieses Problem zu beheben? Danke im Voraus! :)

+0

Versuchen Sie, 180 oder 360 Grad drehen ? Weil ich denke, dass das Drehen um 360 Grad das Gleiche ist, als wenn man überhaupt nicht rotiert. – htinlinn

+0

@htinlinn Ich denke, er versucht, seine Schicht durch eine volle 360-Grad-Drehung zu animieren. –

+0

@robmayoff ah. OK. – htinlinn

Antwort

22

Sie können eine Schicht durch eine (oder mehrere) volle Umdrehungen um seine Z-Achse animieren durch die Schicht des transform.rotation Schlüsselpfad Animieren, wie folgt aus:

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

Sie um die X- oder Y-Achsen animieren Verwenden der Schlüsselpfade transform.rotation.x und transform.rotation.y. (Der Schlüsselpfad transform.rotation.z hat dieselbe Wirkung wie der Schlüsselpfad transform.rotation.) Sie können mehrere Rotationen gleichzeitig auf separaten Achsen anwenden.

Eine andere Möglichkeit, es zu tun, was wahrscheinlich besser funktioniert, wenn Sie einen außeraxialen Vektor drehen, um wollen, ist eine Keyframe-Animation verwendet wird, wie folgt aus:

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