2009-11-18 4 views
1

Existe-t-il un moyen d'animer l'activation ou la désactivation d'un bouton? J'ai essayé ce qui suit sans succès. Je devine à ce stade que la propriété activée ne peut pas être animée comme l'opacité peut - mais j'espère que je me trompe. Je ne peux pas croire qu'il n'y a pas une méthode setEnabled:(BOOL)enabled animated:(BOOL)animated.Animer l'activation d'un UIBarButtonItem?

Répondre

0

Les propriétés animables (via UIView beginAnimations: context :) sont: frame, bounds, center, transform, alpha (à partir de docs Apple).

Vous avez pour déterminer exactement ce que l'animation est (en termes de couleur/alpha/transformer les animations) et créer une animation manuelle (peut-être vous devrez utiliser CAAnimation au lieu de UIView beginAnimations: contexte :)

+0

Aucune de ces propriétés ne s'applique à UIBarButtonItem, qui n'hérite pas de UIView. –

+0

Vous avez raison. Mais UIBarButtonItem peut contenir customView qui est animable. – bealex

0

Vous pouvez décomposer l'activation/la désactivation d'un bouton en un changement d'opacité entre deux images superposées dans un état ou dans l'autre (c'est-à-dire faire ressembler à un fondu entrant/sortant). Dans le gestionnaire d'achèvement d'animation, vous pouvez effectuer l'activation/désactivation de la bascule.

0

est ici une idée :)

Au sein de votre bloc d'animation, supprimer le bouton de la vue et l'ajouter à nouveau avec l'état désactivé. Vous pouvez spécifier quel type d'animation vous voulez ici.

+0

Je ne vois pas quelle méthode je pourrais utiliser pour supprimer un UIBarButtonItem de la vue. De plus, cela ne ferait-il pas disparaître le bouton dans le cadre de l'animation? –

0

Set: self.buttonSetEvent.customView.alpha = 0.2;

et essayer

CGContextRef context = UIGraphicsGetCurrentContext(); 
[UIView beginAnimations:nil context:context]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
[UIView setAnimationDuration:0.15]; 
[UIView setAnimationRepeatCount:2]; 
[UIView setAnimationRepeatAutoreverses:YES]; 

self.buttonSetEvent.customView.alpha = 1; 

[UIView setAnimationDelegate:self]; 
[UIView commitAnimations]; 
+0

Cela ne fonctionne que si "self.buttonSetEvent" (et d'où vient ce nom de variable?) A été créé avec une vue personnalisée. – taxilian

2

Ceci est en fait très simple. UIView.transitionWithView peut prendre un instantané de n'importe quelle vue et effectuer une dissociation croisée entre l'instantané et le nouvel état de la vue. Vous pouvez utiliser cette fonctionnalité pour animer de nombreux changements, y compris enabled.

Utilisez simplement la vue View Controller comme vue cible, spécifiez TransitionCrossDissolve, puis animez comme vous le feriez normalement.

UIView.transitionWithView(self.view, 
    duration: 0.5, 
    options: UIViewAnimationOptions.TransitionCrossDissolve, 
    animations: {() -> Void in 
     self.someButton.enabled = !self.someButton.enabled 
}, completion:nil) 
+3

Si vous modifiez l'un des éléments du bouton de la barre de votre élément de navigation, essayez de passer 'navigationController.navigationBar' comme vue, plutôt que' self.view'. –