Анимировать UIButton - PullRequest
       2

Анимировать UIButton

1 голос
/ 31 октября 2011

Я хотел знать, возможно ли использовать UIB-кнопку, которая в нетронутом виде оживляет?

Не уверен, что в этом есть смысл. У меня есть UIButton, который я разместил через IB на моем XIB. Я использую тип Custom со своим собственным 75x75 изображением для контроля состояния по умолчанию. Когда пользователь касается кнопки, у меня не устанавливается пользовательское изображение, поэтому оно просто темнеет, и это хорошо.

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

Ответы [ 2 ]

4 голосов
/ 31 октября 2011

Вам, вероятно, нужно будет перейти к слою Core Animation. Свойство shadow слоя UIButton является анимируемым, поэтому вы можете создать повторяющуюся CABasicAnimation. Я меняю цвет / размер тени и добавляю его в слой. Следующий код работал для меня.

button.layer.shadowPath = [[UIBezierPath bezierPathWithRect:CGRectInset(button.bounds, -3, -3)] CGPath];
button.layer.shadowColor = [[UIColor whiteColor] CGColor];
button.layer.shadowOpacity = 1.0f;

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"shadowColor"];
animation.fromValue = (id)[[UIColor darkGrayColor] CGColor];
animation.toValue = (id)[[UIColor lightGrayColor] CGColor];
animation.duration = 1.0f;
animation.autoreverses = YES;
animation.repeatCount = NSIntegerMax;

[button.layer addAnimation:animation forKey:@"shadow"];

И прикрепить эти методы в соответствии с событиями управления кнопки.

-(IBAction)userDidTouchDown:(UIButton *)sender
{
    [button.layer removeAnimationForKey:@"shadow"];
}

-(IBAction)userDidTouchUp:(UIButton *)sender
{

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"shadowColor"];
    animation.fromValue = (id)[[UIColor darkGrayColor] CGColor];
    animation.toValue = (id)[[UIColor lightGrayColor] CGColor];
    animation.duration = 1.0f;
    animation.autoreverses = YES;
    animation.repeatCount = NSIntegerMax;

    [button.layer addAnimation:animation forKey:@"shadow"];
}

Вы можете поэкспериментировать со значениями теней (в частности, с траекторией), чтобы подобрать их правильно. Не забудьте присоединить userDidTouchUp: как с внутренней стороны, так и с внешней стороны.

0 голосов
/ 31 октября 2011

Вам понадобится пользовательский вид, поскольку UIButton не может выполнять анимацию. UIView для всего кадра с двумя подпредставлениями: Кнопка внизу, uiimageview сверху.

Вы устанавливаете свойство animationImages uiimageview для своих кадров. Скройте / покажите uiimageview по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...