2009-10-12 6 views
12

J'utilise le code suivant pour déplacer une étiquette d'une position à une autre dans la direction xComment déplacer une vue ou une étiquette dans le sens X en utilisant CABasicAnimation dans iPhone

CABasicAnimation *theAnimation; 
    theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.translation.x"]; 
    theAnimation.duration=1; 
    theAnimation.repeatCount=1; 
    theAnimation.autoreverses=NO; 
    theAnimation.fromValue=[NSNumber numberWithFloat:0]; 
    theAnimation.toValue=[NSNumber numberWithFloat:80]; 


    [lbl.layer addAnimation:theAnimation forKey:@"animateLayer"]; 

Mais dans ce cas, à la fin de l'animation l'étiquette revient à sa position d'origine. Comment s'assurer qu'il reste à la position où il est déplacé.

Y at-il un bon moyen de le faire sans utiliser le minuteur et en changeant les coordonnées par nous-mêmes.

Répondre

14

Une fois l'animation terminée, elle est supprimée. Voilà pourquoi il revient en arrière. Ajoutez ceci à votre animation:

theAnimation.removedOnCompletion = NO; 
theAnimation.fillMode = kCAFillModeForwards; 

Ceci empêchera la suppression de l'animation et indique à l'animation de rester dans son état final à la fin.

+0

étonnante, il fonctionne très bien. – rkb

1

Il ya 2 éléments à mettre à jour ici. La couche de présentation et le modèle. CABasicAnimation ne modifie que la couche de présentation et ne met jamais à jour le modèle. Ainsi, lorsque la couche de présentation de l'animation se termine, elle disparaît et vous voyez la vue avec les valeurs du modèle. Vous avez juste à mettre à jour le modèle avec la nouvelle valeur lorsque l'animation est terminée.

[layer setValue:toValue forKeyPath:keyPath]; 

un coup d'oeil à un utilitaire je l'ai écrit pour aider avec exactement cela, HMBasicAnimation http://hellomihai.wordpress.com/2014/09/02/hmbasicanimation-utility/

utilisation:

[HMBasicAnimation doAnimation:myView.layer // layer youre updating 
         toValue:myView.frame.size.width/2 // your value 
        duration:1.5 // duration 
       delaySeconds:1 // animation delay (good for chaining animations 
         keyPath:HMBasicAnimation_TRANSLATION_X]; // what you're changing, several available 
Questions connexes