iOS presentMoviePlayerViewControllerAnimated使用相同的viewController无法调用两次

时间:2012-08-28 03:31:43

标签: iphone objective-c ios uiviewcontroller mpmovieplayercontroller

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

但是,一旦我点击左上方的蓝色完成按钮,当我再次呈现相同的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时,视频播放器就会被卡住......永远。

有什么想法吗?

0 个答案:

没有答案