0

デフォルトのコントロールを使用して、小さなフレーム内でビデオを再生する MPMoviePlayerController を作成しました。mediaplayer コントロールの「フルスクリーン」ボタンを押すと、すべて正常に動作します。ビデオはまだ再生されています。ビデオが終了したら、フルスクリーン ビューを閉じて、非フルスクリーン ビュー コントローラーに戻りたいと思います。

私のアプリは横向きのみです。「setFullscreen」プロパティをテストして、MPMoviePlayerPlaybackDidFinishNotification が呼び出されたときに元に戻すようにしました。これは機能します。しかし、間違っているポートレートからランドスケープへのビューの回転が表示されます。ランドスケープにランドスケープが必要なだけです。

なぜこれが起こるのですか?

 self.moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];
    [self.moviePlayerController prepareToPlay];
    [self.moviePlayerController setShouldAutoplay:YES];
    self.moviePlayerController.movieSourceType = MPMovieSourceTypeFile;

    self.moviePlayerController.fullscreen = NO;
    self.moviePlayerController.scalingMode = MPMovieScalingModeAspectFit;
    self.moviePlayerController.controlStyle = MPMovieControlStyleEmbedded;

    [self.moviePlayerController.view setFrame: someMovieFrame];

    [tempImageScrollView addSubview:self.moviePlayerController.view];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackCompletePSV:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:self.moviePlayerController];
    [self.moviePlayerController play];



- (void) moviePlaybackCompletePSV:(NSNotification*) notification {

    MPMoviePlayerController *mymoviePlayerController = [notification object];
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerPlaybackDidFinishNotification
                                                  object:mymoviePlayerController];

    NSLog(@"PSV moviePlaybackComplete!");

    // movie fadeout transition ====================
    self.moviePlayerController.view.alpha = 1;

    [UIView animateWithDuration:0.3f delay:0.0 options:UIViewAnimationCurveEaseOut
                     animations:^{
                         self.moviePlayerController.view.alpha = 0;

                         if ([self.moviePlayerController isFullscreen]) {
                             NSLog(@"PSV fullscreen movieplayer deleted");

                             [self.moviePlayerController setFullscreen:NO animated:NO];
                         }
                     }
                     completion:^(BOOL finished) {
                         [mymoviePlayerController stop];
                         [mymoviePlayerController.view removeFromSuperview];

                         [self.moviePlayerController.view removeFromSuperview];
                         self.moviePlayerController = nil;

                    }];
}
4

2 に答える 2

0

ムービー プレーヤーが全画面表示になると、親ビュー コントローラーのviewWillDisappear/viewDidDisappearが呼び出され、通常のサイズに戻ると、親ビュー コントローラーのviewWillAppear/viewDidAppearが呼び出されます。

これらのメソッドの何かが誤って 2 回呼び出されているようです。

これで質問に答えるのに十分でない場合は、親コントローラーに適切なメソッドを投稿してください。

于 2012-10-09T15:38:33.207 に答える
0

iOS 6 では、デバイスの回転と向きの処理に関する変更がいくつかあります。詳細はこちら: http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html%23//apple_ref/doc/uid/TP40012166-CH1-SW19

最初に、ムービー プレーヤーでサポートする必要があるすべての向きSupported interface orientations.plist.

あなたの場合、ルート ビューとしてUInavigationControllerorを使用した可能性があります。UITabbarControllerもしそうなら、それらをサブクラス化し、これらのメソッドをオーバーライドしてみましょう (UIViewControllerルートとして使用した場合は、.mファイルでオーバーライドするだけです): :

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
    return UIInterfaceOrientationLandscapeLeft;
}
- (BOOL)shouldAutorotate
{
    return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

次に、以下のメソッドをMPMoviePlayerController.mファイルに追加します。

- (BOOL)shouldAutorotate{
    return YES;

}
- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskAll;
}

試してみてください。うまくいくことを願っています。

于 2012-10-11T03:40:32.840 に答える