2009-07-19 7 views
0

J'ai implémenté un contrôle UI de type curseur, comme le mécanisme de déverrouillage de l'iPhone.Déplacer un UIImageView avec une animation

Lorsque la méthode touchesEnded est appelée, je ramène le curseur à sa position de départ. Au lieu de cela, je voudrais animer son retour à sa position de départ.

Le code devrait ressembler à ceci, mais cela ne fonctionne pas. Qu'est-ce que je fais mal ici?

Self.unlock est un UIImageView:

CABasicAnimation *theAnimation; 
theAnimation = [CABasicAnimation animationWithKeyPath:@"position.x"]; 
theAnimation.fromValue = [NSNumber numberWithFloat:BEGINX]; 
theAnimation.toValue = [NSNumber numberWithFloat: 0.0]; 
theAnimation.duration = 0.5; 
[self.unlock addAnimation: theAnimation]; 

Désolé pour la question à tête d'os!

Répondre

3

Vous pouvez probablement le faire d'une manière beaucoup plus simple en utilisant l'animation implicite. En supposant que vous faites quelque chose comme ça actuellement:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    ... 
    myView.frame = startingFrame; 
    ... 
} 

Vous pouvez utiliser l'animateur implicite pour animer toutes les modifications apportées à la vue (comme son cadre):

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    ... 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    myView.frame = startingFrame; 
    [UIView commitAnimations]; 
    ... 
} 
+0

Hey, merci ... Je pense que je le fais mal cependant. J'ai essayé le code suivant et j'ai reçu un avertissement "UIImageView ne répond pas à" quelques fois: \t \t [self.unlock beginAnimations: nil context: nil]; \t \t [self.unlock setAnimationDuration: 0,5]; \t \t self.unlock.frame = CGRectMake (0, 0, 75, 37); \t \t [auto.unlock commitAnimations]; –

+0

Peu importe, je vois que votre code est exactement comme il est écrit. Fonctionne comme un charme. Merci! –