2013-04-19 14 views
6

Ich habe den folgenden Code, der eine CALayer durch -45degrees auf der Y-Achse dreht:Mein CALayer verwandeln hält nach der Animation, aber die Perspektive verschwindet

#define D2R(x) (x * (M_PI/180.0)) 

- (void) swipe:(UISwipeGestureRecognizer *)recognizer 
{   
    CATransform3D transform = CATransform3DMakeRotation(D2R(-45), 0, 1.0, 0); 
    transform.m34 = -1.0/850; 

    CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath: @"transform"]; 
    transformAnimation.fillMode = kCAFillModeForwards; 
    transformAnimation.removedOnCompletion = NO; 
    transformAnimation.toValue = [NSValue valueWithCATransform3D:transform]; 
    transformAnimation.duration = 0.5; 

    [self.layer addAnimation:transformAnimation forKey:@"transform"]; 
} 

Die Animation funktioniert, außer es ohne Perspektive endet - zu ignorieren meine m34-Einstellung, wenn ich die Dinge richtig verstehe.

Auf halbem Weg durch:

enter image description here

Am Ende:

enter image description here

Was mache ich falsch?

Antwort

2

Die Animation beeinflusst nur das Aussehen der Ansicht während der Animation. Es wird nicht auf die Ansicht angewendet, nachdem die Animation beendet wurde. Sie müssen das selbst tun. Ich vermute, so etwas wie dieses Recht nach dem Hinzufügen der Animation funktioniert:

self.layer.transform = transform; 

du sofort tun, wie die Animation es verstecken, bis die Animation abgeschlossen ist.

1

Try this:

- (void) swipe:(UISwipeGestureRecognizer *)recognizer 
{   

    CATransform3D transform = CATransform3DIdentity; 
    transform.m34 = -10/850.0; 
    transform = CATransform3DRotate(transform, D2R(-45), 0, 1.0, 0); 

    CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath: @"transform"]; 
    transformAnimation.fillMode = kCAFillModeForwards; 
    transformAnimation.removedOnCompletion = NO; 
    transformAnimation.toValue = [NSValue valueWithCATransform3D:transform]; 
    transformAnimation.duration = 0.5; 

    [self.layer addAnimation:transformAnimation forKey:@"transform"]; 
} 

Und die Wirkung beenden, ist wie folgt:

enter image description here