2010-11-16 14 views
4

J'ai déjà rencontré ce problème plusieurs fois, mais je ne trouvais nulle part une réponse exacte.Animer un changement de largeur dans un UIButton avec un point central fixe

Je souhaite animer le changement de largeur d'un UIButton, similaire à l'effet dans l'App Store lorsque vous appuyez sur le bouton FREE et qu'il passe à INSTALL. Après le toucher, le bouton se dilate mais ne bouge pas. Dans le magasin d'applications, le bouton se déplie vers la gauche: Je souhaite que le bouton s'étende dans les deux directions.

J'ai essayé d'enrubanner button.frame = ... ou button.bounds = ... dans un bloc [UIView beginAnimations:context:], mais cela ne fonctionne pas, même lorsque je place le centre dans le bloc. Peu importe ce que je fais, le bouton semble juste à l'animation à une nouvelle position, puis s'accrocher à la nouvelle largeur. Est-ce que j'ai râté quelque chose? En guise d'addendum, googler des tonnes de gens avec des problèmes similaires, et souvent ils abandonnent simplement l'animation qu'ils essayaient de faire, ce qui me semble étrange. Cela devrait être une solution facile, non? :)

Merci!

+0

J'ai aussi perdu d'innombrables heures à essayer de comprendre cela. Je viens de trouver cette question similaire, mais je n'ai pas essayé la solution: http://stackoverflow.com/questions/3413496/is-it-possible-to-animate-the-width-of-a-uibutton-of-uibuttonstylecustom -type – Brian

+0

hmm, cela semble un peu trop pour résoudre ce problème. laissez-moi savoir si vous l'essayez et cela fonctionne. – kevboh

+0

Ha! J'allais laisser * vous * l'essayer et laissez-moi * savoir * si ça marche :-). Je n'ai pas actuellement besoin d'animer un changement de taille de bouton (j'ai abandonné), mais je suis toujours curieux de trouver une solution, donc je pourrais l'essayer un jour. – Brian

Répondre

1

Je viens de tester cela et il fonctionne parfaitement:

// Button setup (to keep text central during animation) 
button.titleLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth; 

// Animate 
[UIView beginAnimations:nil context:nil]; 
CGRect old = button.frame; 
CGFloat diff = 60; 
button.frame = CGRectMake(old.origin.x-diff/2.0, old.origin.y, old.size.width+diff, old.size.height); 
[UIView commitAnimations]; 
+0

Bon cher ....... – Sabby

1

Juste pour ajouter à cela, si votre UIButton a une image, vous devez également définir la propriété autoresizingMask de imageView du bouton. Dans cet exemple, à la fois pour la hauteur et la largeur.

myButton.titleLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

myButton.imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

En outre, comme une note de côté, [... UIView animateWithDuration est bien meilleur que [UIView beginAnimations ...