4

私のアプリケーションでは、mpmovieplayercontroller を使用してビデオを再生します

最初にスケーリング モードを MPmovieScalingmodefill に設定し、ビデオをスケーリング モードに正しく表示します。

次に、フルスクリーンでビデオを表示してフルスクリーンを終了した後、スケーリングモードをMPmovieScalingmodeFillに設定せず、デフォルトモードでビデオを表示します。

ビデオを再生するための私のコードの下

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(ExitFullScreen:)
                                             name:MPMoviePlayerWillExitFullscreenNotification object:nil];

[appDelegate.moviePlayerController setContentURL:fileURL];

if ([appDelegate checkDevice])
{
    [appDelegate.moviePlayerController.view setFrame:CGRectMake(0,0, 320,463)];
}
else
{
    [appDelegate.moviePlayerController.view setFrame:CGRectMake(0,0, 320,375)];
}


[appDelegate.moviePlayerController prepareToPlay];
appDelegate.moviePlayerController.scalingMode=MPMovieScalingModeFill;
appDelegate.moviePlayerController.controlStyle=MPMovieControlStyleDefault;
appDelegate.moviePlayerController.shouldAutoplay=NO;
[appDelegate.moviePlayerController setFullscreen:YES animated:YES];
[appDelegate.moviePlayerController play];
[self.view addSubview:appDelegate.moviePlayerController.view];

- (void)ExitFullScreen:(NSNotification *)notification{
NSLog(@"Exit full Screen");
[appDelegate.moviePlayerController setControlStyle:MPMovieControlStyleEmbedded];
[appDelegate.moviePlayerController setScalingMode:MPMovieScalingModeFill];}

だから私の問題は、全画面表示を終了した後にスケーリングモードを設定する方法、または画面を終了した後にスケーリングモードを変更しない方法です。

私を助けてください。

ありがとう。

4

2 に答える 2

0

これにより、 が生成されると思いますMPMoviePlayerScalingModeDidChangeNotification

[[NSNotificationCenter defaultCenter] addObserver:self 
                selector:@selector(movieScalingModeDidChange:) 
                name:MPMoviePlayerScalingModeDidChangeNotification 
                object:nil];

MPMoviePlayerScalingModeDidChangeNotification

ムービー プレーヤーのスケーリング モードが変更されたときに投稿されます。userInfo ディクショナリはありません。スケーリング モードは、プログラムまたはユーザーの操作によって変更できます。ムービー プレーヤーのスケーリング モードを設定または取得するには、その scalingMode プロパティにアクセスします。状態が変化したムービー プレーヤーは、通知に関連付けられたオブジェクトとして使用できます。

于 2014-01-09T16:20:10.483 に答える
0

これは「理想的な」解決策ではありませんが、うまくいきます! 基本的に、フルスクリーンを終了すると、MPMoviePlayerController インスタンスがすべて台無しになり、スケーリング プロパティを MPMovieScalingModeFill にリセットしても、いつどこで行っても役に立ちません (私はあらゆる種類のものを試しましたが、1 時間後にあきらめました)。最も簡単な解決策は、MPMoviePlayerController を削除し、全画面表示を終了するたびに MPMoviePlayerController の新しいインスタンスを割り当てることです (理想的ではありませんが、完全に機能します)。

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:NO];
    if (self.moviePlayer != nil)
        [self.moviePlayer.view removeFromSuperview];
    self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:self.videoURL];
    self.moviePlayer.view.frame = CGRectMake(#, #, #, #);
    self.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
    self.moviePlayer.shouldAutoplay = NO;
    [self.moviePlayer setContentURL:self.videoURL];
    [self.moviePlayer prepareToPlay];
    [self.moviePlayer setScalingMode:MPMovieScalingModeFill];
    [self.view addSubview:self.moviePlayer.view];
}

PS: super の viewDidAppear を呼び出すことを忘れないでください。そうしないと、あらゆる種類の予測不可能な混乱に苦しむことになります (iOS 開発では非常によくある間違いです)。

于 2014-02-23T20:43:44.950 に答える