2012-03-05 34 views
7

Tôi đang tạo đối tượng MPMoviePlayerController và phát trực tuyến video ở chế độ toàn màn hình.MPMoviePlayerController không xóa chế độ xem khi nhấp vào xong

Tôi đang sử dụng UIViewController để hiển thị chế độ xem phim.

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    //http://www.youtube.com/watch?feature=player_detailpage&v=ebeQaznNcmE 
    NSURL *url = [NSURL URLWithString:@"http://a1408.g.akamai.net/5/1408/1388/2005110405/1a1a1ad948be278cff2d96046ad90768d848b41947aa1986/sample_mpeg4.mp4"]; 
    MPMoviePlayerController *mPlayer = [[MPMoviePlayerController alloc]initWithContentURL:url]; 
    mPlayer.view.frame = gMainView.frame; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlayBackDidFinish:) 
              name:MPMoviePlayerPlaybackDidFinishNotification 
              object:mPlayer]; 
    mPlayer.shouldAutoplay = YES; 
    mPlayer.controlStyle = MPMovieControlStyleFullscreen; 
    [gMainView addSubview:mPlayer.view]; 
    [mPlayer prepareToPlay]; 
    [mPlayer setFullscreen:YES animated:YES]; 
    [mPlayer play]; 
} 


- (void)moviePlayBackDidFinish:(NSNotification*)notification { 
    int reason = [[[notification userInfo] valueForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue]; 
    if (reason == MPMovieFinishReasonPlaybackEnded) { 
     //movie finished playing 
    } 
    else if (reason == MPMovieFinishReasonUserExited) { 
     //user hit the done button 
     MPMoviePlayerController *moviePlayer = [notification object]; 

     [[NSNotificationCenter defaultCenter] removeObserver:self  
                 name:MPMoviePlayerPlaybackDidFinishNotification 
                 object:moviePlayer]; 

     if ([moviePlayer respondsToSelector:@selector(setFullscreen:animated:)]) { 
      [moviePlayer.view removeFromSuperview]; 
     } 
     [moviePlayer release]; 
    } 
    else if (reason == MPMovieFinishReasonPlaybackError) { 
     //error 
    } 
} 

Khi nhấp xong, hình ảnh video sẽ bị xóa khỏi màn hình nhưng các điều khiển sẽ không bị xóa khỏi màn hình và chế độ xem sẽ không bị xóa khỏi màn hình.

Điều khiển không đến "// người dùng nhấn nút xong". Nó thực thi mã để loại bỏ khung nhìn từ superview, tôi đã kiểm tra bằng cách thêm nhật ký, nhưng các điều khiển không bị xóa khỏi màn hình và khung nhìn không bị xóa khỏi màn hình. Tôi đang làm gì sai?

EDIT:

Nếu tôi sử dụng MPMoviePlayerViewController sau đó nó không còn chờ đợi cho tôi để nhấn Done. Khi video hoàn tất, nó sẽ tự động xóa chế độ xem. Nhưng tôi không muốn điều đó.

EDIT:

Nếu tôi xóa "[MPlayer setFullscreen: YES hoạt hình: YES]", sau đó khi nhấp vào Done, quan điểm được loại bỏ hoàn toàn. Nhưng video không được hiển thị ở chế độ toàn màn hình và thanh trạng thái chuyển sang màu xám, một lần nữa, điều tôi không muốn.

+0

Bạn mất nhiều bước để mô tả những gì bạn không muốn nhưng, ít nhất là với tôi, điều này vẫn chưa thực sự rõ những gì bạn thực sự muốn đạt được. – Till

+0

Các điều khiển không bị xóa khỏi màn hình và chế độ xem trình phát không bị xóa khỏi màn hình. – Anand

+1

Hãy thử giải pháp này: http://stackoverflow.com/questions/6142571/mpmovieplayer-done-button-issue/6142685#6142685 – Till

Trả lời

10

Mã bên dưới đã hiệu quả với tôi, Hy vọng nó cũng giúp bạn.

-(IBAction)playVedio:(id)sender{ 
mp = [[MPMoviePlayerViewController alloc] initWithContentURL:url]; 

    [[mp moviePlayer] prepareToPlay]; 
    [[mp moviePlayer] setUseApplicationAudioSession:NO]; 
    [[mp moviePlayer] setShouldAutoplay:YES]; 
    [[mp moviePlayer] setControlStyle:2]; 
    [[mp moviePlayer] setRepeatMode:MPMovieRepeatModeOne]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoPlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 
    [self presentMoviePlayerViewControllerAnimated:mp]; 

} 

-(void)videoPlayBackDidFinish:(NSNotification*)notification { 

    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 

    [mp.moviePlayer stop]; 
    mp = nil; 
    [mp release]; 
    [self dismissMoviePlayerViewControllerAnimated]; 
} 
+0

Hãy Sirji cũng thêm một cái gì đó nhiều hơn với mã mà người khác có thể dễ dàng hiểu câu trả lời của bạn rằng bạn đã làm gì và vấn đề với mã trong câu hỏi bạn đã làm gì để khắc phục nó, anyways cảm ơn cho giải pháp:) – MKJParekh

+0

vl chăm sóc abt rằng thời gian tới .. !! :) – Sirji

+4

Bạn không nên giả mạo phiếu bầu mà blatantly. – Till

0
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 
    id presentedViewController = [window.rootViewController presentedViewController]; 
    NSString *className = presentedViewController ? NSStringFromClass([presentedViewController class]) : nil; 

    if (window && [className isEqualToString:@"AVFullScreenViewController"]) { 

     return UIInterfaceOrientationMaskAll; 

    } else { 

     UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation; 

     if(UIInterfaceOrientationIsPortrait(interfaceOrientation)) 

     { 

     } 

     else if(UIInterfaceOrientationIsLandscape(interfaceOrientation)) 

     { 


     } 

     return UIInterfaceOrientationMaskPortrait; 

     CGRect frame = [UIScreen mainScreen].applicationFrame; 
     CGSize size = frame.size; 
     NSLog(@"%@", [NSString stringWithFormat:@"Rotation: %s [w=%f, h=%f]", 
         UIInterfaceOrientationIsPortrait(interfaceOrientation) ? "Portrait" : "Landscape", 
         size.width, size.height]); 
    } 
} 
Các vấn đề liên quan