2012-04-05 15 views
12

साथ Segue प्रदर्शन करने के लिए अपने स्टोरीबोर्ड में, मैं स्प्लैश स्क्रीन के रूप दृश्य उपलब्ध हैं। इस दृश्य में, मैं पहले से ही की तरह "ओपन आवेदन" है कि एक मॉडल segue के साथ मेनू दृश्य खोल रहा है एक बटन होता है। लेकिन मैं यह भी स्क्रीन, स्वचालित रूप से segue प्रदर्शन करने के लिए 2 सेकंड दृश्य दिखाई देता है के बाद की तरह चाहते हैं।कैसे विलंब

कुछ यहाँ कोड:

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

आप देख सकते हैं, मैं पहले से ही performSegueWithIdentifier का उपयोग, लेकिन यह तुरंत प्रदर्शन करती है। इसमें देरी करने के लिए एक विधि है?

अग्रिम धन्यवाद।

उत्तर

25

आप e.x दृश्य का प्रकटन 2 सेकंड के बाद अपने 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 के जीवन चक्र के तरीकों अधिभावी सुपर कार्यान्वयन कॉल करने के लिए याद करते हैं।

+0

हम्म बहुत आसान, हुह? कोई आश्चर्य की बात ^^ इस कोड को मुझे भ्रामक था: [आत्म performSelector: @selector (showSplash) withObject: afterDelay शून्य: SPLASH_HIDE_DELAY]; मैंने सोचा कि वहाँ एक रास्ता segues के लिए एक जैसे हैं। धन्यवाद। – kubilay

5

मुझे लगता है कि एक बेहतर दृष्टिकोण है जो नियंत्रक को प्रेषण समस्याओं को संभालने की अनुमति देता है। आप इसे इस तरह प्राप्त कर सकते हैं:
पहले इस तरह एक तरीका है जिसके बाद आप फिर अपने चयनकर्ता

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

का उपयोग करेगा, जब आप अपने वर्तमान दृश्य नियंत्रक के अंदर एक और दृश्य नियंत्रक उपयोग कोड की इस पंक्ति को दिखाना चाहते हैं बनाने के लिए:

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