2011-08-24 25 views
9

Mając interesujący problem z moją aplikacją na iPhone'a. Mam widok z tabelą, a po kliknięciu każda komórka odtwarza wideo w trybie pełnoekranowym, a po naciśnięciu do końca film zatrzymuje się i wraca do widoku tabeli. Jedynym problemem jest to, że po naciśnięciu przycisku w ciągu pierwszych 2 lub 3 sekund ładowania wideo, gdy widok wraca do widoku tabeli, pasek na górze ekranu informujący o czasie i sile baterii itp. Nie jest już wyświetlany. tam, to tylko biała przestrzeń. Ale jeśli naciśniesz przycisk "zrobić" po pierwszych kilku sekundach, to po powrocie do widoku tabeli wszystko jest w porządku! Absolutnie nie mam pojęcia, dlaczego tak się dzieje, a jedyną rzeczą, znalazłem w internecie jest to co jest jakiś facet z prawie dokładnie taki sam problem jak ja:Znikający pasek stanu u góry po zamknięciu MPMoviePlayerController

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

to doprowadzić mnie do spróbuj:

[UIApplication sharedApplication].statusBarHidden = NO; 

Jednak ten nigdzie nie prowadzi.

Kod, który jest wykonywany po kliknięciu na video:

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]; 

a kod, który wykonuje albo gdy film jest wykonywana lub gdy użytkownik kliknie zrobiły to:

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; 

Jeśli każdy może rzucić światło na tę sytuację, byłbym bardzo wdzięczny, ponieważ jest bardzo frustrujący!

Dzięki,

Matt

Odpowiedz

6

Może animacja od kiedy wideo widok znika powoduje problem synchronizacji z animacją pasku stanu.

spróbuj opóźnić statusBarHidden = NIE zadzwoń przez kilka sekund.

NSInteger delay = 3; 

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

Dzięki, to działa, ale najkrótszy czas, w którym wydaje się, że z powodzeniem opóźnia się, to 1 sekunda, która jest nieco za długa. Jeśli jest to jedyny sposób, w jaki mogę to naprawić, to zrobi, ale najlepiej, by pojawił się zaraz po załadowaniu widoku, a nie po 1 sekundzie –

6

Możesz po prostu ustawić opóźnienie, aby było zamiast tego float. Więc byłby to

Miałem ten sam problem i rozwiązałem go, modyfikując nieco kod Richerda. 0,1 sekundy jest do przyjęcia imo. Musiałem również zmienić styl paska stanu, ponieważ zwrócił on styl paska BlackTranslucent, a oryginał był stylem BlackOpaque. Ale teraz działa dobrze.

3

Znalazłem, że przy podanych rozwiązaniach treść często znika pod paskiem stanu. To podejście naprawia to.

Rejestracja dla MPMoviePlayerWillExitFullscreenNotification

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

A potem przywrócić stan widoczności bar i usunąć i ponownie dodać rootViewController z okna głównego, to upewnij się, że granice widoku są ponownie poprawne.

- (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; 
} 
Powiązane problemy