Анимация изменения ширины в кнопке UIB с фиксированной центральной точкой - PullRequest
4 голосов
/ 16 ноября 2010

Я уже несколько раз сталкивался с этой проблемой, но нигде не смог найти точного ответа.

Я хочу анимировать изменение ширины UIButton, аналогично эффекту в App Store, когда вы нажимаете кнопку FREE, и он меняется на INSTALL. После прикосновения кнопка расширяется, но не двигается. В магазине приложений кнопка просто расширяется влево: я хочу, чтобы моя кнопка расширялась в обоих направлениях.

Я пробовал оборачивать button.frame = ... или button.bounds = ... в блок [UIView beginAnimations:context:], но это не работает, даже если я также установил центр внутри блока. Независимо от того, что я делаю, кажется, что кнопка просто отображает анимацию на новой позиции, а затем привязывается к новой ширине. Я что-то здесь упускаю?

В качестве дополнения, поиск в Google поднимает тонны людей с похожими проблемами, и часто они просто отказываются от любой анимации, которую они пытались сделать, что мне кажется странным. Это должно быть простым решением, верно? :)

Спасибо!

Ответы [ 2 ]

1 голос
/ 24 мая 2011

Просто добавьте к этому, если на вашей UIButton есть изображение, вам также нужно установить свойство autoresizingMask для кнопки imageView кнопки.В этом примере как по высоте, так и по ширине.

myButton.titleLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

myButton.imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

Также, как примечание, [UIView animateWithDuration ... намного лучше, чем [UIView beginAnimations ...

1 голос
/ 18 ноября 2010

Я только что проверил это, и он отлично работает:

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