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

#iphone #objective-c #ios4 #uibutton

#iPhone #objective-c #ios4 #uibutton

Вопрос:

Я хотел знать, возможно ли иметь UIButton, который при нетронутом состоянии анимируется?

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

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

Ответ №1:

Вероятно, вам нужно будет перейти к основному уровню анимации. Свойство 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: как с подправить внутри, так и подправить внешние события.

Ответ №2:

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

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