2013-04-19 10 views
6

Mam następujący kod, który obraca CALayer przez -45degrees na osi Y:My CALayer przekształcić posiada po animacji, ale perspektywa znika

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

pracach animacji, oprócz tego, że kończy się bez perspektywy - ignorując moje ustawienie m34, jeśli rozumiem poprawnie.

połowie:

enter image description here

Na koniec:

enter image description here

Co robię źle?

Odpowiedz

2

Animacja wpływa tylko na wygląd widoku podczas animacji. Nie jest on stosowany do widoku po zakończeniu animacji. Musisz to zrobić samodzielnie. Zgaduję coś takiego prawa po dodaniu animacja będzie działać:

self.layer.transform = transform; 

Można to zrobić od razu, jak animacja ukryje go aż animacja uzupełnia.

1

Spróbuj tego:

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

i zakończyć działanie jest tak:

enter image description here

Powiązane problemy