2012-01-14 3 views
0

У меня есть набор UIButtons и UILabels, которые я хочу погасить, когда выбрана одна кнопка, и это правильная кнопка.UIButtons не будет исчезать во время блока анимации

Я пробовал несколько вещей (прокомментировал их в блоке кода), и только UILabels исчезают. Что мне здесь не хватает?

-(IBAction)answerButtonPressed:(UIButton *)sender { 
NSLog(@"Game Question Answer Pressed: %i", sender.tag); 
NSLog(@"%@", sender.titleLabel.text); 

int selectedAnswer =0; 
selectedAnswer = [question.answer intValue]; 

if (selectedAnswer == sender.tag) { 
    NSLog(@"GameQ %@ is the correct answer", sender.titleLabel.text); 

    //self.toggleView; 

    [labelA setAlpha:0]; 
    [labelB setAlpha:0]; 
    [labelC setAlpha:0]; 
    [labelD setAlpha:0]; 


    /* 
    [buttonA setAlpha:0]; 
    [buttonB setAlpha:0]; 
    [buttonC setAlpha:0]; 
    [buttonD setAlpha:0]; 

    [buttonA setHidden:YES]; 
    [buttonB setHidden:YES]; 
    [buttonC setHidden:YES]; 
    [buttonD setHidden:YES]; 
    */   
    [sender setAlpha:1]; 
    [sender setHidden:NO]; 

    [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:1.5]; 

    [UIView animateWithDuration:2.0 
          delay:0.0 
         options: UIViewAnimationCurveEaseOut 
        animations:^{buttonA.alpha = 0;} 
        completion:nil]; 

    [UIView setAnimationDelegate:[UIApplication sharedApplication]]; 
    [UIView setAnimationDidStopSelector:@selector(endIgnoringInteractionEvents)]; 

    [UIView commitAnimations]; 

С тех пор я очистил метод и использовал только один тип блока анимации. UIButton все еще не погаснет, но это делает лейбл. Вот что я имею в качестве блока анимации:

 [UIView animateWithDuration:2.0 
          delay:0.0 
         options: UIViewAnimationCurveEaseOut 
        animations:^{buttonA.alpha = 0;} 
        completion:nil]; 

    [UIView animateWithDuration:2.0 
          delay:0.0 
         options: UIViewAnimationCurveEaseOut 
        animations:^{labelA.alpha = 0;} 
        completion:nil]; 

ответ

9

Я пару вещей, которые я замечаю с места в карьер. Вы комбинируете два типа методов анимации. Старые и новые:

Либо сделать:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:1.5]; 

buttonA.alpha = 0; 

[UIView commitAnimations]; 

OR (и предпочтительным, так как это "современный" путь)

[UIView animateWithDuration:2.0 
         delay:0.0 
        options: UIViewAnimationCurveEaseOut 
       animations:^{buttonA.alpha = 0;} 
       completion:nil]; 

Объединение двух, как у вас, вероятно, причиной блок, который будет вызываться много раз, поскольку первая технология анимации интерполировала вторую. В основном, ставя много много анимаций в очередь, затухание кнопки до 0 ОЧЕНЬ быстро.

Кроме того, по умолчанию (используя, по крайней мере, блок) взаимодействие с пользователем по умолчанию отключено. Нет необходимости делать это явно.

+0

Я очистил метод и принял ваше предложение сделать более «современный» метод. Тем не менее кнопка остается, но ярлык исчезает, как раньше. Что-то должно меняться? Пожалуйста, ознакомьтесь с моими изменениями в первоначальном сообщении. – Nungster

+0

вам не нужно несколько блоков для всего, что вы хотите изменить. Вы можете поместить свою меткуA.alpha = 0; И ваша кнопкаA.alpha = 0; в том же блоке. Вы уверены, что подключили buttonA к экземпляру кнопки в построителе интерфейса? То есть Неужели это сейчас? – MarkPowell

+0

LOL Я такой идиот. Да, поскольку я отправлял сообщения методу с отправителем ID, мне не нужно было подключать мой рефлектор. Теперь, когда мне нужно было отправить сообщение, я проверил, и нить не была подключена. – Nungster