2012-04-05 19 views
12

En mi guión gráfico, tengo una vista como pantalla de presentación. En esta vista, ya tengo un botón como "Abrir aplicación" que abre la vista de menú con una transición modal. Pero también quiero que la pantalla se realice automáticamente, como después de que aparezca la vista de 2 segundos.Cómo realizar Segue con retraso

Algunos código aquí:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [self performSegueWithIdentifier:@"splashScreenSegue" sender:self]; 
} 

Como se puede ver, que ya utilizan performSegueWithIdentifier pero realiza inmediatamente. ¿Hay algún método para retrasarlo?

Gracias de antemano.

Respuesta

25

Puede usar GCD de dispatch_after para ejecutar su código segue 2 segundos después de que aparezca la vista, e.x:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    double delayInSeconds = 2.0; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [self performSegueWithIdentifier:@"splashScreenSegue" sender:self]; 
    }); 
} 

Además, asegúrese de que usted recuerde llamar a la aplicación super Al sustituir métodos de ciclo de vida de UIViewController.

+0

hmm muy fácil, ¿eh? no es sorprendente ^^ este código me estaba confundiendo: [self performSelector: @selector (showSplash) withObject: nil afterDelay: SPLASH_HIDE_DELAY]; Me preguntaba si habría alguna forma de segues. Gracias. – kubilay

5

Creo que hay un mejor enfoque que permite al controlador mismo manejar los problemas de envío. Se puede lograr de esta manera:
primero crear un método como éste, que más tarde va a utilizar su selector

- (void)showAnotherViewController{ 
    [self performSegueWithIdentifier:@"yourSegueToAnotherViewController" sender:self]; 
} 

A continuación, cuando se quiere mostrar otra utilización controlador de vista esta línea de código dentro de su controlador de vista actual:

[self performSelector:@selector(showAnotherViewController) withObject:nil afterDelay:yourDelayInSeconds]; 
Cuestiones relacionadas