2012-04-05 10 views
12

In meinem Storyboard habe ich eine Ansicht als Startbildschirm. In dieser Ansicht habe ich bereits eine Schaltfläche wie "Anwendung öffnen", die die Menüansicht mit einem modalen Übergang öffnet. Aber ich möchte auch, dass der Bildschirm die Überblendung automatisch ausführt, so wie nach 2 Sekunden erscheint.So führen Sie Segue mit Verzögerung aus

Einige Code hier:

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

Wie Sie sehen können, verwende ich performSegueWithIdentifier schon, aber es führt sofort. Gibt es eine Methode, um es zu verzögern?

Vielen Dank im Voraus.

Antwort

25

können Sie GCD die Verwendung dispatch_after Ihre segue Code 2 Sekunden nach der Ansicht angezeigt wird, e.x auszuführen:

- (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]; 
    }); 
} 

Zusätzlich stellen Sie bitte sicher, dass Sie die Super-Implementierung zu nennen erinnern, wenn UIViewController Lebenszyklus Methoden überschreiben.

+0

hmm sehr einfach, nicht wahr? keine Überraschung ^^ Dieser Code verwirrte mich: [self performSelector: @selector (showSplash) withObject: nil afterDelay: SPLASH_HIDE_DELAY]; Ich fragte mich, ob es einen Weg für Übergänge gibt. Vielen Dank. – kubilay

5

Ich denke, es gibt einen besseren Ansatz, der den Controller selbst mit Dispatching-Problemen umgehen kann. Sie können es wie folgt erreichen:
zunächst eine Methode wie folgt erstellen, die Sie später seine Wähler

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

Dann nutzen Sie, wenn Sie eine andere View-Controller verwenden diese Codezeile in Ihrem aktuellen View-Controller angezeigt werden soll:

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