2012-04-05 19 views
12

私のストーリーボードでは、スプラッシュ画面として表示しています。このビューでは、モーダルセグのメニュービューを開く「Open Application」のようなボタンが既にあります。しかし、私はまた、2秒後にビューが表示されるように、自動的にセグを実行するようにしたい。遅延を伴うSegueの実行方法

ここにいくつかのコード:

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

をあなたが見ることができるように、私はすでにperformSegueWithIdentifierを使用しますが、それはすぐに実行されます。それを遅らせる方法はありますか?

ありがとうございます。

答えて

25

あなたはe.x、ビューが表示された2秒後にセグエコード実行にGCDのdispatch_afterを使用することができます。

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

また、あなたがのUIViewControllerのライフサイクルメソッドをオーバーライドするときスーパー実装を呼び出すことを覚えていることを確認してください。

+0

hmm非常に簡単ですか?驚きは^^このコードは私を混乱させていました:[self performSelector:@selector(showSplash)withObject:nil afterDelay:SPLASH_HIDE_DELAY];私は、もしかするとセグのための道があれば、それは不思議でした。ありがとう。 – kubilay

5

コントローラ自体がディスパッチングの問題を処理できるようにするより良いアプローチがあると思います。

:最初に、別のビューコントローラの使用をあなたの現在のビューコントローラ内部のコード行を表示したい場合、後であなたが次に

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

そのセレクタを使用します。このようなメソッドを作成
:あなたはこのようにそれを達成することができます

[self performSelector:@selector(showAnotherViewController) withObject:nil afterDelay:yourDelayInSeconds]; 
関連する問題