MPMoviePlayerViewController 进入后台变黑

Posted

技术标签:

【中文标题】MPMoviePlayerViewController 进入后台变黑【英文标题】:MPMoviePlayerViewController becomes black when enters background 【发布时间】:2011-12-01 16:35:46 【问题描述】:

我有 MPMoviePlayerViewController 的问题,当应用程序进入后台然后我再次启动它或转到另一个 viewControllers 时,电影变黑了!我有在我的菜单背景中播放的电影,这是我的代码:

EIDTED 代码:

    -(void)viewDidLoad 
        [self moviePlayer2];
     

   - (void) moviePlayer2 



    NSString *path = [[NSBundle mainBundle] pathForResource:@"cloud" ofType:@"mp4"];
    player = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL fileURLWithPath:path]];
    player.view.userInteractionEnabled = YES;    
    player.moviePlayer.repeatMode = YES;
    player.moviePlayer.scalingMode = MPMovieScalingModeFill;
    player.moviePlayer.controlStyle = MPMovieControlStyleNone;

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(moviePlayBackStateChange:) 
                                                 name:MPMoviePlayerPlaybackStateDidChangeNotification
                                               object:[player moviePlayer]];

     [[player moviePlayer] play];

    [self.view addSubview:player.view]; 




-(void) moviePlayBackStateChange: (NSNotification *) note 

    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackStateDidChangeNotification object:[player moviePlayer]];

    [[player moviePlayer] play];

    //[player release];
    NSLog(@"FINISHED");

谢谢。

【问题讨论】:

当您的应用进入后台时,movieFinishedPlaying 是否会被调用?如果你不知道,设置一个断点(或使用 NSLog 到控制台)并找出。 当我在 viewControllers 之间切换时 yes 。编译器显示 NSLog 消息 【参考方案1】:

我认为您可能需要在下面添加代码:

[[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(moviePlayBackStateChange:) 
                                                 name:MPMoviePlayerPlaybackStateDidChangeNotification
                                               object:[player moviePlayer]];

并在moviePlayBackStateChange 方法中处理电影状态。 电影播放时电影会暂停,应用程序进入后台,所以当应用程序从后台返回时,您需要让电影恢复如下。如果没有,电影将保持暂停状态。这就是您的应用变黑的原因。

[[player moviePlayer] play];

然后电影将继续播放。 添加当应用程序进入后台和从后台返回时应该调用的两个方法:

-(void) pauseMovieInBackGround

   [player moviePlayer] pause];
   [player.view removeFromSuperview];

-(void) resumeMovieInFrontGround

   [self.view addSubview:player.view];
   [[player moviePlayer] play];

希望这对你有帮助。

【讨论】:

谢谢 我应该把这段代码放在哪里? [[player moviePlayer] play]; 请你看看我编辑的代码...因为我有同样的问题...切换视图后我的电影变黑了! 视图随着presentmodalview控制器改变,然后从其他视图中解散 您能重新考虑我的代码吗?我真的需要这个答案 @Mc.Lover 你可以添加[[player moviePlayer]playbackState];在moviePlayBackStateChange方法中监控movieplayer的状态。所有状态都是here @Mc.Lover 更重要的是,我认为您应该在您的应用程序进入后台时暂停电影并从超级视图中删除电影视图,然后添加电影视图并在您播放时播放应用从后台返回。【参考方案2】:

尝试改变这个:

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

到这里:

[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:[player moviePlayer]];
[movieController.view removeFromSuperview];
[player release];

看看是否可行:D

【讨论】:

您是否将删除的视图替换为任何其他视图?如果不是,那就可以解释了。确保使用“[viewController addSubview:newView];”但是用你自己的视图替换 viewController 和 newView

以上是关于MPMoviePlayerViewController 进入后台变黑的主要内容,如果未能解决你的问题,请参考以下文章