2012-12-20 12 views
6

MPMoviePlayerController Il giocatore nasconde i controlli del giocatore in modo permanente dopo aver premuto il pulsante Fine.MPMoviePlayerController: il giocatore nasconde i controlli del giocatore solo in modo esponenziale iOS6

Possiedo un lettore Embedded con moviePlayer.controlStyle = MPMovieControlStyleEmbedded e quando l'utente tocca la modalità a schermo intero nella notifica moviePlayerDidEnterFullscreen sto creando [moviePlayer setFullscreen: NO]; e trasformare il lettore video in modalità Landscape

moviePlayer.view.transform = CGAffineTransformMakeRotation(degreesToRadians(-90)); 

e l'impostazione

moviePlayer.controlStyle = MPMovieControlStyleFullscreen; 

Poi Quando si tocca il tasto di fatto e in moviePlayBackDidFinish sto trasformando la vista posteriore in modalità ritratto e l'impostazione ControlStyle su Embedded. Finora funziona bene. Dopo che il video sarà stato messo in pausa e quando premo il pulsante di riproduzione la sua riproduzione di inizio e il lettore rimarrà per un po 'e si nasconderà per sempre. il giocatore non sarà più visibile dopo aver registrato il video. Ho provato a impostare il controllo del player su embedded dopo un ritardo. ma niente sta funzionando. Si prega di aiutare in questo problema.

Questa questione è solo nella versione sotto iOS 6

Codice

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

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(moviePlayerDidEnterFullscreen:) 
              name:MPMoviePlayerDidEnterFullscreenNotification 
              object:nil]; 


if (mpVideoPlayerController) 
{ 
    [mpVideoPlayerController.moviePlayer pause]; 
    [mpVideoPlayerController.moviePlayer stop]; 
} 


mpVideoPlayerController = nil; 
mpVideoPlayerController = [[VideoPlayerViewController alloc] initWithContentURL: theURL]; 


mpVideoPlayerController.moviePlayer.movieSourceType = liveStreaming ? MPMovieSourceTypeStreaming : MPMovieSourceTypeUnknown; 

if ([mpVideoPlayerController.moviePlayer respondsToSelector:@selector(setAllowsAirPlay:)]) { 
    mpVideoPlayerController.moviePlayer.allowsAirPlay = YES; 
} 

[[mpVideoPlayerController.moviePlayer view] setFrame:viewInsetRect]; 
mpVideoPlayerController.moviePlayer.controlStyle = MPMovieControlStyleEmbedded; 
mpVideoPlayerController.moviePlayer.scalingMode = MPMovieScalingModeAspectFit; 
[viewController.view addSubview: [mpVideoPlayerController.moviePlayer view]]; 
[mpVideoPlayerController.moviePlayer play]; 
} 


-(void) moviePlayerDidEnterFullscreen :(NSNotification*)notification { 
    [mpVideoPlayerController.moviePlayer setFullscreen:NO]; 
    [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
    [self performSelector:@selector(setControlStyleFullscreen) withObject:nil afterDelay:0.2]; 
    [UIView animateWithDuration:0.3 
        animations:^{ 
         mpVideoPlayerController.moviePlayer.view.transform = CGAffineTransformIdentity; 
         mpVideoPlayerController.moviePlayer.view.transform = CGAffineTransformMakeRotation(degreesToRadians(-90)); 
         CGRect frame=[[UIScreen mainScreen] applicationFrame]; 
         frame.origin.y=-20; 
         mpVideoPlayerController.moviePlayer.view.frame = frame;//CGRectMake(0.0, 0.0, 480.0, 300.0); 
        } completion:^(BOOL finished) { 

        }]; 


} 

- (void) setControlStyleFullscreen 
     mpVideoPlayerController.moviePlayer.controlStyle = MPMovieControlStyleFullscreen; 

- (void) setControlStyleEmbedded 

     mpVideoPlayerController.moviePlayer.controlStyle = MPMovieControlStyleEmbedded; 



- moviePlayBackDidFinish: 

    NSLog(@"moviePlayBackDidFinish:"); 

    [self rotateToInterfaceOrientation:UIInterfaceOrientationPortrait frameForView:(viewController).videoContentView.frame]; 

    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 

    [self performSelector:@selector(setControlStyleEmbedded) withObject:nil afterDelay:0.2]; 
+1

Condividere il codice completo di MPmoviecontroller che si utilizza ... – Vishal

+1

Grazie Vishal, si prega di controllare il codice –

risposta

1

Il codice è una specie di difettoso e innesca quei MPMoviePlayerController bug.

  • set superfluoFare schermo come siamo già a schermo intero.
  • setControlStyle superfluo come siamo già in grande stile il controllo a schermo intero

In generale, non si dovrebbe mai applicare le cose su MPMoviePlayerController che sono già fatte.

- (void)moviePlayerDidEnterFullscreen :(NSNotification*)notification 
{ 
    // 
    //remove both lines from this notification handler 
    // 
    [mpVideoPlayerController.moviePlayer setFullscreen:NO]; 
    [self performSelector:@selector(setControlStyleFullscreen) withObject:nil afterDelay:0.2]; 
    [...] 
} 

Si può anche estendere l'implementazione setControlStyleFullscreen/embedded controllando per la modalità corrente. Può sembrare strano ma aiuta molto.

- (void)setControlStyleEmbedded 
{ 
    if (mpVideoPlayerController.moviePlayer.controlStyle != MPMovieControlStyleEmbedded) 
    { 
     mpVideoPlayerController.moviePlayer.controlStyle = MPMovieControlStyleEmbedded; 
    } 
} 

- (void)setControlStyleFullscreen 
{ 
    if (mpVideoPlayerController.moviePlayer.controlStyle != MPMovieControlStyleFullscreen) 
    { 
     mpVideoPlayerController.moviePlayer.controlStyle = MPMovieControlStyleFullscreen; 
    } 
} 
Problemi correlati