2012-04-05 7 views
12

내 스토리 보드에 스플래시 화면으로보기가 있습니다. 이 뷰에는 모달 세구 (modal segue)가있는 메뉴 뷰를 여는 "Open Application"과 같은 버튼이 있습니다. 그러나 2 초 후보기와 같이 화면이 자동으로 segue를 수행하기를 원합니다. 여기지연으로 Segue를 수행하는 방법

일부 코드는 : 당신이 볼 수 있듯이

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

, 이미 performSegueWithIdentifier를 사용하지만 즉시 수행한다. 지연시킬 수있는 방법이 있습니까?

미리 감사드립니다.

답변

25

당신은 e.x,보기가 나타납니다 이초 후 SEGUE 코드 실행 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의 라이프 사이클 메소드를 오버라이드 (override) 할 때 수퍼 구현을 호출하는 것을 기억 있는지 확인하시기 바랍니다.

+0

음, 매우 쉽지? 놀랍지도 않아 ^^이 코드는 나를 혼란스럽게 만들었다 : [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]; 
관련 문제