#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 по мере необходимости.