2010-04-14 5 views
0

J'ai un CALayer que je veux animer sur l'écran. J'ai créé deux méthodes: une diapositive ouvre la couche et une diapositive à proximité. Ces deux fonctionnent en affectant une propriété à la propriété de transformation du calque.Problème avec CAAnimation et les transformations CALayer

Maintenant, je veux utiliser un CAKeyFrameAnimation pour ouvrir le calque. J'ai réussi à faire fonctionner le calque, mais maintenant je ne peux pas faire glisser le calque en utilisant ma vieille méthode. J'essaie de comprendre pourquoi c'est. Toute aide est la bienvenue.

code

pour mon CALayer:

- (id)init 
{ 
    if(self = [super init]) 
    { 
    bIsOpen = NO; 
    closeTransform = self.transform; 
    openTransform = CATransform3DMakeTranslation(-235.0, 0.0, 0.0); 
    } 
    return self; 
} 

- (void)closeMenu 
{ 
    if(bIsOpen) 
    { 
    self.transform = closeTransform; 
    bIsOpen = !bIsOpen; 
    } 
} 

- (void)openMenu 
{ 
    if(!bIsOpen) 
    { 
    CAKeyframeAnimation *closeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 
    closeAnimation.duration = 1.0; 
    closeAnimation.removedOnCompletion = NO; 
    closeAnimation.fillMode = kCAFillModeForwards; 
    closeAnimation.values = [NSArray arrayWithObjects:[NSValue valueWithCATransform3D:closeTransform],[NSValue valueWithCATransform3D:openTransform],nil]; 
    closeAnimation.timingFunctions = [NSArray arrayWithObject:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]]; 

    [self addAnimation:closeAnimation forKey:@"transform"]; 
    bIsOpen = !bIsOpen; 
    } 
} 

Répondre

0

je me suis dit cela. Mon problème était que l'animation animait l'objet comme s'il modifiait la propriété qui est changée (dans ce cas la transformation), mais la valeur n'est pas réellement changée. Je crois que cela a à voir avec la couche de présentation par rapport à la couche modèle. Ainsi, lorsque l'animation a été effectuée pour ouvrir la couche, la couche a été positionnée correctement sur l'écran, mais sa transformation n'a pas réellement changé. Pour résoudre ce problème, j'ai utilisé la méthode déléguée (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag pour définir la transformation sur l'état ouvert une fois l'animation terminée.