UIButton изменить размер с анимацией - PullRequest
15 голосов
/ 30 июня 2010

Я создаю меню, и я хочу, чтобы кнопки «выскочили», я думаю, на экране.В основном я хочу начать с 0px размеров, а затем перейти к полному размеру кнопок.Я могу анимировать альфа и положение, если я хочу, но не могу выполнить измерения, и я думаю, что это потому, что это изображение на кнопке.

Если я сделаю UIButtonTypeRoundRect, вы увидите, что кнопка анимируется позадиизображение, но изображение статическое.

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];

Таким образом, альфа работает, а изменение размера - нет.Я также играл с stretchableImageWithLeftCapWidth, чтобы попытаться дать ему контекст или что-то еще, но безрезультатно.

Приветствия за вашу помощь.

Ответы [ 2 ]

32 голосов
/ 30 июня 2010

Не могли бы вы попробовать вместо этого использовать следующий код?

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];

Ваша кнопка должна начать немного больше, а затем сжиматься вниз.Если это масштабируется правильно, просто отрегулируйте коэффициент масштабирования до и после, чтобы он подходил.

5 голосов
/ 12 ноября 2015

Обновлено для Swift:

Вы можете вставить это в любой IBAction, который вы привязали к кнопке, чтобы оживить ее при касании.

    // 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
...