2013-04-19 10 views
6

Ho il seguente codice che ruota una CALayer dal -45degrees sull'asse Y:mio CALayer trasformare tiene dopo l'animazione, ma la prospettiva scompare

#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"]; 
} 

Le opere di animazione, tranne che si conclude con nessuna prospettiva - ignorando la mia impostazione m34 se sto capendo le cose correttamente.

metà:

enter image description here

Alla fine:

enter image description here

Che cosa sto facendo di sbagliato?

risposta

2

L'animazione ha effetto solo sull'aspetto della vista durante l'animazione. Non viene applicato alla vista al termine dell'animazione. Devi farlo da solo. Sto indovinando qualcosa di simile a destra dopo aver aggiunto l'animazione funziona:

self.layer.transform = transform; 

È possibile farlo subito, come l'animazione sarà nasconderlo fino a quando l'animazione completa.

1

Prova questo:

- (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"]; 
} 

E finire l'effetto è simile a questo:

enter image description here

Problemi correlati