アプリのテスト中に奇妙な動作に遭遇しました。このアプリには、によって再生されるビデオストリームが含まれていMPMoviePlayer
ます。iOS6で(プレーヤーコントローラーのボタンを使用して)フルスクリーンに入ると、画面が空白になり、ムービーの再生が停止します。iOS5では、ムービーは期待どおりに続行されます。
これはiOS6のバグだと思うので、疑問に思っています。-
他の誰かがこの動作を経験したことがありますか?
-それは私のコードのバグですか、それともOSのバグですか?-それに対処する方法について何か提案はありますか?
両方の電話で、ビデオが画面上のフレームに含まれている場合(ビューの一部として)、ビデオストリームは期待どおりに再生されます。ただし、フルスクリーンに入るときは異なります。私は両方の電話での動作を撮影しました。
比較的新しいiPhone4S(iOS 5.1.1を実行)では、次の(予想される)動作:http: //4340.no/ios5.mov
iPhone 3S(iOS 6.0にアップグレード)では、次の(予期しない)動作:http: //4340.no/ios6.mov
playButtonを処理するコード:
-(IBAction) playButtonClicked:(id)sender
{
NSURL* url = [NSURL URLWithString:self.experiment.videoPath];
self.mpController = [[MPMoviePlayerController alloc] initWithContentURL:url];
[self.mpController prepareToPlay];
self.mpController.view.frame = CGRectMake(0, 0, 320, 214);
[self.view addSubview:self.mpController.view];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(movieFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.mpController];
[self.mpController play];
}
これを解決する方法に関するヒントや提案をいただければ幸いです。
死後-コードと説明:
iOS6(iOS5ではなく)で映画がフルスクリーンに入ると、判明して呼び出されますviewWillDisapear
。viewDidDisappear
解決策は、これらの方法のいずれかでビデオプレーヤーを閉じる前に、MPMovieplayerController
が実行されていないことを確認することです。fullscreen
その後、私の新しいコードは次のようになりまし
た。&& !self.mpController.fullscreen
-(void)viewDidDisappear:(BOOL)animated
{
if(self.mpController && !self.mpController.fullscreen){
[[NSNotificationCenter defaultCenter]
removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.mpController];
[self.mpController.view removeFromSuperview];
self.mpController = nil;
}
}