2010-08-09 20 views
2

Ce code est en cours d'exécution dans la méthode touchended d'un uiview sous-classé, cependant il ne s'anime pas, il change juste instantanément la couleur d'arrière-plan. Qu'est-ce qui ne va pas?La durée d'animation de l'iPhone UIView ne fonctionne que instantanément

self.backgroundColor = [UIColor blackColor]; 
    [UIView beginAnimations:nil context:NULL]; 

    [UIView setAnimationDuration:20]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
    if (score < .40) { 
     self.backgroundColor = [UIColor redColor]; 
    } else { 
     self.backgroundColor = [UIColor greenColor]; 
    } 
    [UIView commitAnimations]; 
+0

-t-il fonctionner lorsque vous appelez à partir un autre endroit, dans la sous-classe ou même en dehors de la sous-classe? – mvds

+1

change la couleur vraiment animable ??? – lukya

+0

Il est possible, bien que peu probable, que '20' soit interprété plutôt que d'être lancé comme un flottant. Essayez de le donner 20.0. Vérifiez également que cette couleur est une «propriété animable» dans les documents du développeur Apple. – mtrc

Répondre

1

La méthode [UIView commitAnimations] ne bloque pas - donc si vous l'appelez, il va commencer l'animation, mais il exécutera le code après ce point instantanément. Si vous avez un code en dessous qui change la couleur d'arrière-plan, il va casser vos animations. Si cela ne fonctionne pas, essayez d'animer une autre propriété - je sais au large de ma tête position & alpha sont animables, mais je ne suis pas certain de la couleur. (Alpha est juste une valeur float, et le centre est juste un CGPoint, qui sont tous deux primitives, mais UIColor est un type référencé et UIView ne peut pas savoir comment animer un pointeur.)