2009-06-22 10 views
3

Existe-t-il un moyen de créer une animation personnalisée en cliquant sur un bouton de l'iPhone? Je voudrais quelque chose comme le bouton App Store - il montre le prix, puis quand vous cliquez dessus, il change de couleur et le texte change pour acheter maintenant, puis lorsque vous cliquez à nouveau, il achève l'achat.iPhone - Comment animer un bouton lorsqu'il est pressé?

La UIViewAnimationTransition ne contient que quelques valeurs qui ne fournissent pas toutes les fonctionnalités. Est-il possible de faire quelque chose comme ça, mais avec l'animation:

- (IBAction) changeButtonDisplay:(id)sender { 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.8]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:purchaseButton cache:NO]; //the built in UIViewAnimationTransition values don't provide enough flexibility 

    [purchaseButton setTitle:@"Buy Now" forState:UIControlStateNormal]; 
    [purchaseButton setBackgroundColor:[UIColor greenColor]]; 
    [purchaseButton addTarget:self action:@selector(purchaseItems:) forControlEvents:UIControlEventTouchUpInside]; 

    [UIView commitAnimations]; 

} 

Ce code fonctionne et affiche la transition appropriée et permettre le second clic pour faire l'action appropriée, mais les changements de titre et de couleur instantanément, non dans une animation fluide. Est-il possible de faire facilement une telle animation, dois-je créer une sous-classe UIButton et faire l'animation "manuellement"? Si oui, quelle méthode devrais-je remplacer?

Répondre

4

Plutôt que de simplement changer le titre et la cible, etc. du bouton, ayez deux boutons séparés qui effectuent chaque action et semblent différents. Ensuite, lorsque vous appuyez sur le bouton, appelez une méthode qui supprime le bouton en cours de sa super vue et ajoute le nouveau bouton à la vue à sa place. Enveloppez-le dans un bloc d'animation UIView et vous devriez obtenir votre animation.

Pour que cela fonctionne, vous devez également définir la transition d'animation sur la vue d'ensemble du bouton. Donc, il peut être utile d'avoir une "vue conteneur" comme il se peut, et ensuite ajouter des boutons comme sous-vues de cela.

code pseudo pourrait ressembler à quelque chose comme ceci:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.8]; 
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:buttonConteinerView cache:NO]; //the built in UIViewAnimationTransition values don't provide enough flexibility 

[purchaseButton retain]; 
[purchaseButton removeFromSuperView]; 

[buttonContainerView addSubview:secondPurchaseButton]; 

[UIView commitAnimations]; 
+1

En outre, la transition de l'animation par défaut est un fondu, de sorte que vous ne pourriez pas besoin de définir une transition d'animation. – Jasarien

3

Une norme UIView fera ce que vous voulez. La propriété backgroundColor de UIView est une propriété animable.

Je ferais propre "bouton" en sous-classant UIView OU alternativement sous-classe un UIButton et ajouter des sous-vues à elle. (Note: UIButtons étaient une douleur à ce sujet dans 2.2, pas sûr dans la version 3.0)

Vous avez besoin d'un UILabel pour chaque état de texte:

UILabel *textForStateOne; 
UILabel *textForStateTwo; 

Et vous pouvez changer la couleur d'arrière-plan de la vue parent.

donc vous faire une méthode dans votre nouvelle classe de bouton:

-(void)toggleState{ 

myState = !myState; 

    if(myState){ 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.8]; 

     [textForStateOne setAlpha:1.0] 
     [textForStateTwo setAlpha:0.0] 

     [self setBackgroundColor:[UIColor greenColor]]; 

     [UIView commitAnimations]; 


    } else{ 

     //do the opposite here 

    } 




} 
0
UIView *btnView4=button; 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:btnView4 cache:YES]; 
[UIView commitAnimations];`` 
+0

s'il vous plaît apprendre à-comment formater le code (il y a un point d'interrogation en haut de la boîte de saisie :-) – kleopatra

Questions connexes