2009-10-04 8 views
3

J'ai un état Selected et un état Normal pour un UIButton qui sont tous deux des UIImages. Quand un bouton est touché, je voudrais qu'il atteigne l'état sélectionné puis qu'il revienne à l'état normal sur une période d'une seconde. J'ai mis l'animation suivante quand on appuie sur UIButton * btn, mais il revient juste à l'état désélectionné. Comment devrais-je y arriver?Effacer un UIButton quand on le touche

[btn setSelected:YES]; 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:1.0f]; 
[btn setSelected:NO]; 
[UIView commitAnimations]; 

Vive

Nik

Répondre

12

Depuis selected n'est pas une propriété animable, qui ne fonctionnera pas (comme vous avez découvert). Ma solution serait d'avoir l'état sélectionné du btn dans un UIImageView séparé directement sous le bouton dans le même endroit exact. Puis, dans l'action pour appuyant sur le bouton:

- (void) tapButton:(UIButton *)btn { 
    btn.alpha = 0; 
    [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1]; 
    [UIView setAnimationDelegate:[UIApplication sharedApplication]]; 
    [UIView setAnimationDidStopSelector:@selector(endIgnoringInteractionEvents)]; 
    btn.alpha = 1; 
    [UIView commitAnimations]; 
} 

Remarque J'ai également ajouté les begin/endIgnoringInteractionEvents appels afin que l'utilisateur ne peut pas taper sur le bouton pendant qu'il est fondu à son état normal. Si vous voulez permettre cela, remplacez les begin/end appels par [UIView setAnimationBeginsFromCurrentState];

+1

Merci, cela fonctionnerait bien. :-) – niklassaers