2011-08-24 9 views
9

मेरे आईफोन ऐप के साथ एक दिलचस्प छोटी समस्या है। मेरे पास एक टेबल और प्रत्येक सेल के साथ एक दृश्य है, जब क्लिक किया जाता है, तो जब आप दबाए जाते हैं तो एक वीडियो पूर्णस्क्रीन चलाता है, वीडियो बंद हो जाता है और तालिका दृश्य पर वापस चला जाता है। एकमात्र समस्या यह है कि, जब आप वीडियो लोडिंग के पहले 2 या 3 सेकंड में दबाए जाते हैं, जब दृश्य तालिका दृश्य पर वापस जाता है, तो स्क्रीन के शीर्ष पर स्थित बार जो समय और बैटरी की शक्ति आदि बताता है अब नहीं है वहां, यह सिर्फ एक सफेद जगह है। लेकिन अगर आप पहले कुछ सेकंड के बाद दबाते हैं, तो जब आप टेबल व्यू पर वापस जाते हैं, तो सब ठीक है! मैं बिल्कुल पता नहीं क्यों यह हो रहा है है और केवल एक चीज मैं इंटरनेट पर पाया मुझे के रूप में इस जो काफी वास्तव में एक ही समस्या के साथ कुछ पुरुष है:MPMoviePlayerController बंद होने के बाद शीर्ष पर गायब स्थिति स्थिति

http://www.iphonedevsdk.com/forum/iphone-sdk-development/53020-disappearing-status-bar.html

यह नेतृत्व मुझे का उपयोग करके देखें:

[UIApplication sharedApplication].statusBarHidden = NO; 

हालांकि इस नेतृत्व कहीं नहीं या तो।

कोड है कि जब वे एक वीडियो पर क्लिक करें निष्पादित होने

NSString *path = [[NSBundle mainBundle] pathForResource:currentTitle ofType:@"m4v"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
movieController = [[MPMoviePlayerController alloc] initWithContentURL:url]; 
[movieController setControlStyle:MPMovieControlStyleFullscreen]; 
[movieController setFullscreen:YES]; 
movieController.view.frame = self.view.bounds; 
[self.view addSubview:movieController.view]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 

और कोड कि निष्पादित करता है या तो जब वीडियो किया जाता है या जब उपयोगकर्ता किया क्लिक्स है:

NSLog(@"movieController moviePlayBackDidFinish"); 
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 

[movieController setFullscreen:NO animated:NO]; 
[movieController.view removeFromSuperview]; 

[movieController release]; 

LiveEventsView *liveEventsView = [[LiveEventsView alloc] initWithNibName:@"LiveEventsView" bundle:nil]; 
UIView *currentView = self.view; 
UIView *theWindow = [currentView superview]; 
UIView *newView = liveEventsView.view; 
newView.frame = CGRectMake(0, 20, 320, 460); 
[currentView removeFromSuperview]; 
[theWindow addSubview:newView]; 
[UIApplication sharedApplication].statusBarHidden = NO; 

हैं कोई भी इस स्थिति पर कोई प्रकाश डाल सकता है, मैं बहुत आभारी हूं क्योंकि यह बेहद निराशाजनक है!

धन्यवाद,

मैट

उत्तर

6

हो सकता है कि जब वीडियो दृश्य गायब हो जाता है स्थिति पट्टी एनीमेशन के साथ एक समय समस्या पैदा कर रहा है से एनीमेशन।

स्थिति में देरी करने का प्रयास करें BarHidden = कुछ सेकंड तक कॉल नहीं।

NSInteger delay = 3; 

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC), dispatch_get_current_queue(), ^{ 
[UIApplication sharedApplication].statusBarHidden = NO; 
}); 
+0

धन्यवाद, यह काम करता है लेकिन यह सबसे छोटा समय लगता है कि सफलतापूर्वक देरी होने के लिए यह 1 सेकंड है जो थोड़ा लंबा है। यदि यह एकमात्र तरीका है जिसे मैं इसे ठीक कर सकता हूं, तो यह करेगा, लेकिन अधिमानतः यह केवल 1 सेकंड के बजाय व्यू लोड के रूप में दिखाई देगा –

6

आप बस विलंब को इसके बजाय एक फ्लोट सेट कर सकते हैं। तो यह

float delay = 0.1; 

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC), dispatch_get_current_queue(), ^{ 
     [UIApplication sharedApplication].statusBarHidden = NO; 
     [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackOpaque; 
    }); 

मुझे एक ही समस्या थी और इसे समृद्ध कोड को थोड़ा सा संशोधित करके हल किया गया। 0.1 सेकंड स्वीकार्य आईएमओ है। मुझे स्टेटस बार शैली को भी बदलना पड़ा क्योंकि यह ब्लैकट्रांसल्यूसेंट बार शैली लौटा और मूल ब्लैकऑपाक शैली थी। लेकिन अब ठीक काम करता है।

3

मुझे पता चला है कि दिए गए समाधानों के साथ सामग्री अक्सर स्टेटस बार के नीचे गायब हो जाती है। यह दृष्टिकोण इसे ठीक करता है। MPMoviePlayerWillExitFullscreenNotification

के लिए

रजिस्टर

 [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlayerWillExitFullscreen:) 
               name:MPMoviePlayerWillExitFullscreenNotification 
               object:self.moviePlayer]; 

और फिर स्थिति पट्टी दृश्यता रीसेट और हटाने और मुख्य विंडो से rootViewController फिर से जोड़ने के लिए, यह सुनिश्चित करें कि दृश्य की सीमाएँ फिर से सही हैं कर देगा।

- (void)moviePlayerWillExitFullscreen:(NSNotification *)notification { 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide]; 
    AppDelegate *appDelegate = [UIApplication sharedApplication].delegate; 

    id rootViewController = appDelegate.window.rootViewController; 
    appDelegate.window.rootViewController = nil; 
    appDelegate.window.rootViewController = rootViewController; 
}