2011-08-24 8 views
9

Avere un piccolo problema interessante con la mia app per iPhone. Ho una vista con una tabella e ogni cella, quando si fa clic, riproduce un video a schermo intero, quindi quando si preme fatto, il video si ferma e torna alla visualizzazione tabella. L'unico problema è che quando si preme fatto entro i primi 2 o 3 secondi del caricamento del video, quando la vista torna alla visualizzazione tabella, la barra nella parte superiore dello schermo che indica l'ora e la potenza della batteria ecc. Non è più lì, è solo uno spazio bianco. Ma se premi premuto dopo i primi secondi, poi quando torni alla visualizzazione tabella, tutto va assolutamente bene! Non ho assolutamente idea del perché questo sta accadendo e l'unica cosa che ho trovato su Internet è questo che è un ragazzo con più o meno esattamente lo stesso problema come me:Scomparsa barra di stato nella parte superiore dopo che MPMoviePlayerController è chiuso

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

Questo mi ha portato a provare a utilizzare:

[UIApplication sharedApplication].statusBarHidden = NO; 

Tuttavia questo non porta neanche da nessuna parte.

Il codice che viene eseguito quando si fa clic su un 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]; 

E il codice che viene eseguito sia quando il video è fatto o quando l'utente fa clic fatto è:

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; 

Se chiunque può far luce su questa situazione, sarei molto grato perché estremamente frustrante!

Grazie,

Matt

risposta

6

Forse l'animazione da quando la vista il video scompare sta causando un problema di temporizzazione con l'animazione barra di stato.

provare a ritardare lo statoBarHidden = NO chiamata di pochi secondi.

NSInteger delay = 3; 

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

Grazie, funziona, ma il tempo più breve che sembra ritardare con successo è di 1 secondo, un po 'troppo lungo. Se è l'unico modo in cui posso sistemarlo, allora lo farà, ma preferibilmente apparirà non appena la vista verrà caricata, piuttosto che 1 secondo dopo –

6

Si può semplicemente impostare il ritardo su un valore fisso. Quindi sarebbe

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; 
    }); 

Ho avuto lo stesso problema e l'ho risolto modificando un po 'il codice di richerd. 0,1 secondi è accettabile imo. Ho anche dovuto modificare lo stile della barra di stato poiché restituiva uno stile barra BlackTranslucent e l'originale era in stile BlackOpaque. Ma funziona bene ora.

3

Ho trovato che con le soluzioni fornite il contenuto spesso scompare sotto la barra di stato. Questo approccio lo risolve.

Registrati MPMoviePlayerWillExitFullscreenNotification

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

E poi reimpostare la barra di stato e visibilità rimuovere e aggiungere nuovamente il RootViewController dalla finestra principale, questo farà in modo che i confini della vista sono ancora corretti.

- (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; 
} 
Problemi correlati