2012-12-20 14 views
6

MPMoviePlayerController Gracz ukrywa kontrolki gracza w sposób ciągły po naciśnięciu wykonanego przycisku.MPMoviePlayerController: Gracz ukrywa kontrolki gracza tylko w trybie ciągłym iOS6

Posiadam wbudowany odtwarzacz z moviePlayer.controlStyle = MPMovieControlStyleEmbedded, a gdy użytkownik dotknie trybu pełnoekranowego w powiadomieniu moviePlayerDidEnterFullscreen robię [filmPlayer setFullscreen: NO]; i przekształcenia video player do trybu Krajobrazowego

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

i ustawienie

moviePlayer.controlStyle = MPMovieControlStyleFullscreen; 

Wtedy kiedy dotknij przycisk i zrobić w moviePlayBackDidFinish jestem przekształcając widok z powrotem do trybu portretu i ustawienie ControlStyle do wbudowania. Jak dotąd działa dobrze. Po tym wideo zostanie wstrzymane i po dotknięciu przycisku odtwarzania rozpocznie się odtwarzanie, a odtwarzacz pozostanie na chwilę i ukryje się na stałe. Gracz nie będzie już widoczny po nagraniu wideo. Próbowałem ustawić kontrolę odtwarzacza, aby była osadzona po opóźnieniu. ale nic nie działa. Pomóż w tym wydaniu.

wystawia To jest tylko w wersji poniżej iOS 6

Code

[[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

Udostępnij pełny kod MPmoviecontroller, którego używasz ... – Vishal

+1

Dzięki Vishal, proszę sprawdzić kod –

Odpowiedz

1

Kod jest rodzaj wadliwy i wyzwala te MPMoviePlayerController błędów.

  • zbędny zestaw Pełny ekran, ponieważ jesteśmy już w trybie pełnoekranowym.
  • zbędny setControlStyle jak już jesteśmy w stylu sterowania pełnoekranowym

Ogólnie rzecz biorąc, nigdy nie powinno się egzekwować rzeczy na MPMoviePlayerController które są już zrobione.

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

Możesz równie dobrze rozszerzyć implementację setControlStyleFullscreen/Embedded, sprawdzając bieżący tryb. To może wydawać się dziwne, ale bardzo pomaga.

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

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