2013-06-26 54 views
1

我是一個新手,希望我的應用程序在延遲一段時間後顯示下一個屏幕。 基本上我創建了控制器並添加了微調器。來自控制器的呼叫控制器

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [spinner startAnimating]; 
    sleep(5); 
    [spinner stopAnimating]; 
} 

接下來我想給我的下一個控制器顯示EntryViewController。什麼是實現這一目標的最佳方式?

生病,如果需要

+3

只是一個領導。你不應該在生產代碼中使用'sleep'。有很多更好的方法(如下面的Vin)。 「睡眠」可用於測試延遲,但不適用於可用的,可靠的代碼。 – Firo

+1

它只是一個原型。在真正的應用程序將有url請求,所以我將不得不打電話給控制器請求完成後 – Avdept

回答

1

您可以使用-performSelector方法這樣添加任何信息:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [spinner startAnimating]; 
    [self performSelector:@selector(yourMethod) withObject:nil afterDelay:1]; 
} 

-yourMethod您可以添加代碼導航到下一個視圖控制器:

-(void)yourMethod 
{ 
    //Write the code for Navigation. 
    [spinner stopAnimating]; 
} 

唐忘了看看NSObject Class Reference

+0

基本上我需要一些例子,如何導航到下一個視圖控制器 – Avdept

+0

@Avdept你是使用故事板,xibs或代碼爲您的意見/視圖控制器? – Firo

+0

故事板..... – Avdept

1

a。請勿在主線程中使用sleep,因爲它會阻塞整個GUI。

b。不要在viewDidLoad做動畫,因​​爲在這個階段還沒有出現。請使用viewDidAppear

c。有不同的方式來「顯示」視圖控制器。這是用於顯示視圖控制器的代碼(即視圖控制器不會被推送到UINavigationController)。有關呈現視圖控制器的更多信息,請參閱this link。該代碼還解決點上方

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

double delayInSeconds = 5.0; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
    dispatch_after(popTime, dispatch_get_current_queue(), ^{ 
     [self presentViewController: EntryViewController animated:YES completion:nil]; 
    }); 
} 

使用的dispatch有點先進,但你真的應該學習它。

+0

用於使用GCD而不是'performSelector:afterDelay:'的+1 – Abizern