2010-06-30 10 views
15

Je crée un menu et je veux que les boutons "pop" je suppose sur l'écran. Fondamentalement, je veux commencer à 0px dimensions, puis aller jusqu'à la taille maximale des boutons. Je peux animer l'alpha et la position si je veux mais je ne peux pas faire les dimensions et je pense que c'est parce que c'est une image sur le bouton.UIButton redimensionner avec animation

Si je fais un UIButtonTypeRoundRect, vous pouvez voir le bouton en cours d'animation derrière l'image mais l'image est statique.

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button setBackgroundImage:[UIImage imageNamed:@"settings.png"] forState:UIControlStateNormal]; 
button.frame = CGRectMake(20, 20, 0, 0); 
button.alpha = 0; 
[self.view addSubview:button]; 
CGRect frame = button.frame; 
[UIView beginAnimations:@"button" context:nil]; 
[UIView setAnimationDuration:1]; 
button.alpha = 1; 
frame.size.width += 53; 
frame.size.height += 53; 
button.frame = frame; 
[UIView setAnimationDelegate:self]; 
[UIView commitAnimations]; 

Ainsi, l'Alpha fonctionne mais pas le redimensionnement. J'ai aussi joué avec stretchableImageWithLeftCapWidth pour essayer de donner le contexte ou quelque chose mais en vain.

Bravo pour votre aide.

+0

Avez-vous essayé de faire le bouton 'Scale To Fill'? – iwasrobbed

+0

yup, n'oubliez pas d'essayer cela à un moment donné. Qui vous a volé? – Rudiger

Répondre

32

Pourriez-vous utiliser le code suivant à la place?

button.transform = CGAffineTransformMakeScale(1.5,1.5); 
button.alpha = 0.0f; 

[UIView beginAnimations:@"button" context:nil]; 
[UIView setAnimationDuration:1]; 
    button.transform = CGAffineTransformMakeScale(1,1); 
    button.alpha = 1.0f; 
[UIView commitAnimations]; 

Votre bouton devrait commencer légèrement plus grand, puis rétrécir vers le bas. Si cela s'adapte correctement, ajustez simplement le facteur d'échelle avant et après.

+0

Merci, je vais jeter un coup d'oeil et revenir vers vous. – Rudiger

+0

Cela n'a pas fonctionné tout de suite. Button = CGAffineTransformMakeScale (1.5,1.5); a jeté une erreur. Mais fondamentalement, vous pouvez faire le button.transform = CGAffineTransformMakeScale (1.5,1.5); et il anime une augmentation d'échelle comme j'avais besoin. Merci :) – Rudiger

+0

Des trucs géniaux - J'ai modifié l'exemple de code pour quelqu'un d'autre qui pourrait vouloir l'utiliser – davbryn

5

Mise à jour pour Swift:

Vous pouvez insérer ce dans tout ce IBAction vous avez attaché à un bouton pour l'animer quand il est touché.

// animate button 
    // play with the scale (1.25) to adjust to your liking 
    yourButton.transform = CGAffineTransformMakeScale(1.25, 1.25) 
    yourButton.alpha = 0.0 

    UIView.beginAnimations("yourButton", context: nil) 
    // play with the animationDuration to adjust to your liking 
    UIView.setAnimationDuration(0.25) 
    yourButton.transform = CGAffineTransformMakeScale(1.0, 1.0) 
    yourButton.alpha = 1.0