Como faço para esperar até uma animação em uma classe diferente é concluído antes de continuar?

StackOverflow https://stackoverflow.com/questions/6330050

Pergunta

Eu tenho o código simples:

[otherClass doMethodOneWhichHasAnimation];

e que a animação dura 0,8 segundos. Seguido pelo código que empurra um viewcontroller:

SchemeView *schemeView = [[SchemeView alloc] init];
    [self.navigationController pushViewController:schemeView animated:YES];
    [schemeView release];

O problema é, ele empurra o viewcontroller sem esperar, e eu gostaria que esperar. atraso fazendo apenas atrasa a coisa toda, incluindo a primeira animação seja iniciado.

Como posso obtê-lo para esperar os 0,8 segundos antes de executar o segundo trecho de código?

Foi útil?

Solução

Você pode empurrar após a animação é feito

[UIView animateWithDuration:0.8
        animations:^{ 
            // Animation
        } 
        completion:^(BOOL finished){

          // PushView

        }];

para

ou

[self performSelector:@selector(metohodToPushView) withObject:nil afterDelay:0.8];

Outras dicas

Você pode usar CATransaction para executar um bloco conclusão depois de qualquer animação, sem alterar o código fonte do método que cria a animação. Você precisará com o quadro QuartzCore e você 'll necessidade de #import <QuartzCore/QuartzCore.h>. Em seguida, você pode fazer isso:

[CATransaction begin]; {

    [CATransaction setCompletionBlock:^{
        // This block runs after any animations created before the call to
        // [CATransaction commit] below.  Specifically, if
        // doMethodOneWhichHasAnimation starts any animations, this block
        // will not run until those animations are finished.

        SchemeView *schemeView = [[SchemeView alloc] init];
            [self.navigationController pushViewController:schemeView animated:YES];
            [schemeView release];
    }];

    // You don't need to modify `doMethodOneWhichHasAnimation`.  Its animations are
    // automatically part of the current transaction.
    [otherClass doMethodOneWhichHasAnimation];

} [CATransaction commit];

Eu tenho contornar este problema, fazendo uma nova classe para executar animações.

Esta classe contagem de quanto tempo como passado sincronizado com o início da animação.

Você alimenta no tempo para a animação para a classe e tanto o bloco de animação eo contador de classe leva esse número em.

Quando o contador chegou ao fim você sabe que a animação também foi concluída.

... Tudo sem aleatórios Bibliotecas complicado.

simplesmente chamar um método com o tempo de atraso intervalo

como -

[self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.00];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top