だから私は自分のView Controllerで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 は View Controller を参照します。
これで、完全に機能するビデオプレーヤーが表示されます。次に、少し待つと、コントロールが消え、ビデオをタップして元に戻すことができます. 左上にある [完了] ボタンを使用して、このビデオ プレーヤーを閉じることができます。一度それを閉じると、ビデオ ビュー コントローラーを元に戻すことができます。ビデオはまだ再生されますが、少し待ってコントロールが消えると、画面をタップしてコントロールを表示できなくなり、事実上ビデオプレーヤーに閉じ込められます.
[完了] ボタンにフックするためのさまざまな解決策を見つけましたが、ビデオ プレーヤーを再利用することはできませんでした。例えば:
// 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 を再度表示しようとすると、ビデオ プレーヤーがロード中にスタックしてしまいます... 永久に。
何か案は?