2012-04-05 47 views
12

在我的故事板,我有一个视图作为启动画面。在这个视图中,我已经有了一个像“打开应用程序”这样的按钮,该按钮用模态渐变打开菜单视图。但是我也想让screen自动执行segue,就像2秒后出现view一样。如何执行与延迟Segue

一些代码在这里:

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

正如你所看到的,我已经使用performSegueWithIdentifier但它会立即执行。有没有办法让它延迟?

在此先感谢。

回答

25

您可以使用GCD的dispatch_after执行出现视图2秒后您的SEGUE代码,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]; 
    }); 
} 

此外,请确保您还记得重写UIViewController的生命周期方法时要调用父类的实现。

+0

嗯很简单,呵呵?没有意外^^这段代码令我困惑:[self performSelector:@selector(showSplash)withObject:nil afterDelay:SPLASH_HIDE_DELAY];我想知道,如果有一种方式适合赛车。谢谢。 – kubilay 2012-04-05 09:00:06

5

我认为有一个更好的方法可以让控制器自己处理调度问题。你可以这样实现它:
首先创建一个像这样的方法,以后当你想显示另一个视图控制器使用当前视图控制器内该行的代码,你会用它选择

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

然后:

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