0

所以我试图在我自己的视图控制器中使用方法 presentMoviePlayerViewControllerAnimated 来呈现 MPMoviePlayerViewController。

但是,一旦我单击左上角的蓝色 Done 按钮,当我再次呈现相同的 viewController 时(这样我就可以恢复视频而不必创建另一个 MPMoviePlayerViewController 实例),如果让它们消失,控件将不再起作用几秒钟后自己。如果您在控件消失之前与它们进行交互,这些控件仍然会起作用,但是一旦它们自行消失,您就无法再在点击视频时将它们恢复。这发生在设备和模拟器上。

简化代码:

- (void) startPlayback
{
    if (self.videoViewController == nil)
    {
        self.videoViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:self.videoUrl]];
    }
    // present the video player
    [self presentMoviePlayerViewControllerAnimated:self.videoViewController];
}

假设 startPlayback 是视图控制器中的委托方法或其他东西,并且它是由按钮触发的。在这种情况下,Self 将引用视图控制器。

因此,它会调出完美运行的视频播放器。然后,稍等片刻,控件就会消失,我可以通过点击视频将它们恢复。然后我可以使用左上角的完成按钮关闭这个视频播放器。一旦我关闭它,我就可以带回视频视图控制器。视频仍将播放,但现在,当我稍等片刻,控件消失时,我无法再通过点击屏幕来调出控件,从而有效地将自己困在视频播放器中。

我已经找到了连接到完成按钮的各种解决方案,但它并没有真正让我重用视频播放器。例如:

// Remove the observer so that the blue button doesn't close the viewController
[[NSNotificationCenter defaultCenter] removeObserver:self.videoViewController name:MPMoviePlayerPlaybackDidFinishNotification object:self.videoViewController.moviePlayer];

// Add itself as an observer
[[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(movieEnded:) name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:self.videoViewController.moviePlayer];

在我的movieEnded:中,我可以通过以下方式关闭电影视图控制器:

[self dismissMoviePlayerViewControllerAnimated];

但是,当我尝试再次显示 viewController 时,视频播放器就会卡住 Loading... 永远。

有任何想法吗?

4

0 回答 0