2010-11-19 22 views
3

J'essaye de convertir du code d'animation qui utilise beginAnimations pour utiliser des blocs d'animation. Le problème que j'ai est que lorsque j'utilise les blocs d'animations les animations GOES semblent beaucoup plus vite et je ne peux pas régler la vitesse en changeant la valeur de la duréeLa vitesse d'animation est différente entre beginAnimations et l'utilisation du bloc d'animations

C'est ce que j'ai commencé à l'origine:

birdFly.image = [UIImage imageNamed: @"bird1.png"]; 
[self.view addSubview:birdFly]; 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:20]; 
birdFly.frame = CGRectMake(-1116,27,111,48); 
[UIView commitAnimations]; 
[birdFly release]; 

C'est ce que j'ai essayé en premier lieu de remplacer ce que j'avais ci-dessus. En utilisant ce code, l'animation est beaucoup plus rapide que ce qu'elle utilisait avec le code original. semble même changer la durée ne pas changer la vitesse du tout:

birdFly.image = [UIImage imageNamed: @"bird1.png"]; 
[self.view addSubview:birdFly]; 
[UIView animateWithDuration:20 
    animations:^{ 
     birdFly.frame = CGRectMake(-1116,27,111,48); 
    }]; 

J'ai aussi essayé, pensant que je avais besoin d'un bloc d'achèvement, mais la vitesse était toujours aussi rapide par rapport à ce que j'avais à l'origine quand je n'étais n'utilise pas de blocs.

birdFly.image = [UIImage imageNamed: @"bird1.png"]; 
[self.view addSubview:birdFly];  
UIViewAnimationOptions options = UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction; 
     [UIView animateWithDuration:20 delay:0.0 options:options animations:^ 
     { 
      birdFly.frame = CGRectMake(-1116,27,111,48); 
     } completion:nil]; 

Le code fait-il tous la même chose? Est-ce que je manque juste quelque chose de très simple ici? Je pensais que l'augmentation de la durée rendrait l'oiseau plus lent et la diminuerait le ferait aller plus vite, mais cela ne semble pas avoir d'impact sur tout quand on le change en utilisant des blocs.

Toutes les instructions seraient appréciées.

Merci.

Aaron

Répondre

4

Si votre bloc d'animation se produit dans un autre bloc d'animation, -animateWithDuration:animations: hériteront la durée du bloc externe. Essayez d'ajouter UIViewAnimationOptionOverrideInheritedDuration à la liste d'options (et éventuellement UIViewAnimationOptionOverrideInheritedCurve si vous avez également besoin de surcharger la courbe).

+0

Merci. Ça a marché. Je ne pensais pas que je l'avais emboîté mais après que vous l'ayez mentionné, j'ai fait quelques recherches et il était, en fait, imbriqué dans un autre bloc d'animation. Reconnaissance! – AaronG