0

アプリのテスト中に奇妙な動作に遭遇しました。このアプリには、によって再生されるビデオストリームが含まれてい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ではなく)で映画がフルスクリーンに入ると、判明して呼び出されますviewWillDisapearviewDidDisappear

解決策は、これらの方法のいずれかでビデオプレーヤーを閉じる前に、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;
    }
}
4

1 に答える 1

1

viewWillDisappearまたはviewDidDisappearでビデオプレーヤーを停止または解放していないことを確認してください。

于 2012-10-11T13:44:07.437 に答える