2011-01-21 3 views
3

Я хотел бы создать UIButton, который «дышит», меняет свою альфу от 1,0 до 0,7 и обратно, повторяя. Код довольно прост, но когда анимация запускается, кнопка не доступна. Какая жалость, для кнопки. Я могу понять, почему кнопка не может быть нажата, когда анимация меняет свое положение, но изменение альфы кажется мне совершенно безвредным. Есть ли способ сделать кнопку нажатой, сохраняя анимацию, а не анимацию вручную?Как сделать интерактивный UIButton с анимированной альфой?

ответ

10

Используйте непрозрачность.

UIButton *btnTest = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btnTest.frame = CGRectMake(0, 0, 100, 100); 
[btnTest setTitle:@"Breathe" forState:UIControlStateNormal]; 
[btnTest addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:btnTest]; 

CABasicAnimation *fadeAnimation=[CABasicAnimation animationWithKeyPath:@"opacity"]; 
fadeAnimation.fromValue=[NSNumber numberWithFloat:0.7]; 
fadeAnimation.toValue=[NSNumber numberWithFloat:1.0]; 
fadeAnimation.duration=1.0; 
fadeAnimation.repeatCount=INFINITY; 
fadeAnimation.autoreverses=YES; 

[btnTest.layer addAnimation:fadeAnimation forKey:@"fadeInOut"]; 
+0

Отлично, это работает. Раньше я пытался анимировать слой вместо кнопки, но я искал свойство alpha и игнорировал «непрозрачность». В любом случае, он не работает с неявной анимацией, вам нужно прикрепить анимацию непосредственно к слою, чтобы кнопка работала. Спасибо! – zoul

+0

Это работает как волшебство. Спасибо, но горячо, чтобы остановить анимацию? – San

+2

Чтобы остановить анимацию, вызовите '[btnTest.layer removeAnimationForKey: @" fadeInOut "];'. Чтобы остановить все анимации в представлении, используйте '[btnTest.layer removeAllAnimations];'. – jowie

Смежные вопросы