Кнопки UIB не будут исчезать во время анимационного блока - PullRequest
0 голосов
/ 14 января 2012

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

Я перепробовал несколько вещей (прокомментировал их в блоке кода), и исчезли только 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];

1 Ответ

9 голосов
/ 14 января 2012

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

Либо выполните:

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

buttonA.alpha = 0;

[UIView commitAnimations];

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

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

Комбинируя два, как выиметь, вероятно, вызовет многократный вызов блока, так как первый метод анимации интерполирует второй.По сути, добавление в очередь множества анимаций и быстрое замирание кнопки до 0.

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

...