15

私は一日中非常に厄介な問題に苦しんでいます、そして私はこのボードで助けを見つけることができればと思います。

私はMPMoviePlayerControllerを使用してiPadでフルスクリーンの映画を再生していますが、地獄に行くためのあらゆる努力にもかかわらず、常に表示されるステータスバーを削除する方法がわかりません。

これが私が映画を表示するために使用する方法のコードです:

-(void)launchVideoFromButton:(id)sender{

         NSString *videoPath = [[NSBundle mainBundle] pathForResource:@"movie01" ofType:@"m4v"];
         NSURL *videoPathURL = [NSURL fileURLWithPath:videoPath];
         moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoPathURL];

         [self.view addSubview:moviePlayer.view];

         moviePlayer.shouldAutoplay = YES;
         moviePlayer.movieSourceType = MPMovieSourceTypeFile;


         [moviePlayer setFullscreen:YES animated:YES];
         moviePlayer.controlStyle = MPMovieControlStyleFullscreen;

         NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
         [notificationCenter addObserver:self selector:@selector(moviePlayerEvent:) name:MPMoviePlayerLoadStateDidChangeNotification object:moviePlayer];

    }



    -(void)moviePlayerEvent:(NSNotification*)aNotification{

         [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];
         NSLog(@"%i", [UIApplication sharedApplication].statusBarHidden);

    }

コンソールでは、ムービーが表示されたときにmoviePlayerEventが起動されますが、ステータスバーはまだそこにあります:[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO]は動作していないようです。私は運が悪かった他のMPMoviePlayerController通知を使用しようとしてきました。

誰かがそれについて私を助けてもらえますか?

前もって感謝します。

4

9 に答える 9

22

残念ながら、この問題に遭遇した後、調査と多くの実験を通じて、iOSステータスバーをフルスクリーンモードで非表示にしておくことはほとんど不可能であると判断しました。何をしても、フルスクリーンのプレーヤーコントロールが表示されると、ステータスバーも表示されます(は尊重されませんsetStatusBarHidden:YES)。これは埋め込みプレーヤーコントロールには当てはまりませんが、ユーザーは埋め込みモードと全画面モードを簡単に切り替えることができるため、コントロールが表示されているときにステータスバーを維持するためにこれを実際に使用することはできません。

もちろん、コントロールがフェードアウトすると、少なくともステータスバーは消えます...

于 2011-04-22T02:50:35.133 に答える
9

ムービー プレーヤーのビューをメイン ビューに追加しないでください。代わりに、ムービー プレーヤーを次のようにモーダルに表示します (簡潔/明確にするために一部の手順は省略されています)。

moviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:url];

// Register for the playback finished notification.
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(myMovieFinishedCallback:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:moviePlayerViewController.moviePlayer];


//Present
    [self presentMoviePlayerViewControllerAnimated:moviePlayerViewController];

    // Play the movie!
    self.moviePlayerViewController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
    [self.moviePlayerViewController.moviePlayer play];



// When the movie is done, release the controller.
-(void)myMovieFinishedCallback:(NSNotification*)aNotification
{

    //NSLog(@"playback terminated");

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerPlaybackDidFinishNotification
                                                  object:moviePlayerViewController.moviePlayer];


    [moviePlayerViewController release], moviePlayerViewController = nil;


}
于 2010-09-06T18:19:05.247 に答える
2

MPMoviePlayerViewController を使用して、次のように設定するとうまくいきました

[moviePlayerController.moviePlayer setFullscreen:YES animated:NO];
moviePlayerController.moviePlayer.controlStyle = MPMovieControlStyleFullscreen;

この前に:

[self presentViewController:moviePlayerController animated:NO completion:^{ }];

および直後に次のように記述します。

moviePlayerController.moviePlayer.controlStyle = MPMovieControlStyleNone;

念のため、私もこれを行いました:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlayerLoadStateDidChange:)
                                                 name:MPMoviePlayerLoadStateDidChangeNotification object:nil];

...


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


    if ([[moviePlayerController moviePlayer] loadState] == MPMovieLoadStateStalled) {

    } else if([[moviePlayerController moviePlayer] loadState] != MPMovieLoadStateUnknown) {

        [moviePlayerController moviePlayer].controlStyle = MPMovieControlStyleNone;

        ...
    }
}

つまり、ステータス バーもコントロールもありません...純粋なビデオだけです。)

(iOS 5.1 デバイスと 6.0 シミュレーターでテスト済み)。

于 2012-11-10T01:32:24.600 に答える
1

MPMovieControlModeVolumeHiddenを使用しても機能しませんでした。機能したのは、ビデオがフルスクリーンのMPMovieControlModeVolumeOnlyだけでした。

myMoviePlayer.controlStyle = MPMovieControlModeVolumeOnly;
[myMoviePlayer setFullscreen:YES];

また、親ビューにサブビューとしてムービービューを追加しています。

[parentView addSubview:myMoviePlayer.view];

私のアプリにはステータスバーがないはずです。下位互換性のために、アプリデリゲートで次のコードを使用します。

if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)])
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
else
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];
于 2012-10-02T14:56:14.817 に答える
1

ステータス バーは非表示になりましたが、再生コントロールと共に再び表示されました。

  -(void)viewDidLoad:{
        [super viewDidLoad];
        MPMoviePlayerViewController *moviePlayerViewController =
                [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL];

        [[NSNotificationCenter defaultCenter] addObserver:self 
                 selector:@selector(playbackStateChange:)
                 name:MPMoviePlayerLoadStateDidChangeNotification
                 object:moviePlayerViewController.moviePlayer];
    }
    -(void)playbackStateChange:(NSNotification*)notification{
        if([[UIApplication sharedApplication]respondsToSelector:@selector(setStatusBarHidden: withAnimation:)])
        [[UIApplication sharedApplication] setStatusBarHidden:YES 
                       withAnimation:UIStatusBarAnimationNone];
        else 
            [[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];
}
于 2010-12-16T13:05:24.210 に答える
0

この問題に遭遇した人のために、役立つかもしれない独自の解決策を見つけました。ただし、アプリの残りの部分にステータスバーが表示されず、再生中ではなく、ムービーが終了してインターフェースに戻ったらステータスバーを再び非表示にしようとしている場合にのみ適用されます.

MPMoviePlayerController が、ナビゲーション コントローラーのビュー スタックにプッシュされている UIView にサブビューとして追加されている場合、その親ビュー コントローラーの viewWillDisappear メソッドを使用できます。

その方法では、コントロール スタイルを none に変更できます。これにより、ビューが消える前にすべてのムービー プレーヤー コントロールがクリアされ、ステータス バーが既に非表示に設定されている場合はクリアされます。ビューが画面外に移動し、ユーザーがそれを操作しなくなったため、これはユーザーにはまったくわかりません。

于 2011-12-15T16:04:53.753 に答える
0

これは答えではありません。私は同じ問題を抱えています。ただし、更新できる部分が1つあります..

ステータス バーは、コントロールが表示されている場合にのみ表示されます。

ムービーをクリックすると、コントロールとステータス バーが非表示になり、もう一度クリックするとコントロールが表示され、ステータス バーも表示されます。

また、ムービーを起動する直前にプログラムでステータス バーを非表示にしています。

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];

そして、これが私が映画を追加する方法です:

[[[UIApplication sharedApplication] keyWindow] addSubview: movieView];

于 2010-12-06T18:13:26.613 に答える
0

私は同じ問題を抱えていましたが、自分のinfo.plist行に追加しStatus bar is initially hidden - Boolean - YESたところうまくいきました!
ところで、私は iOS 5.1、Xcode 4.3.2 を使用しています。

于 2012-05-24T14:54:34.350 に答える
0

私の解決策があなたの問題に当てはまるかどうかはわかりませんが、私のセットアップ、つまり iOS 5.1 を実行している第 4 世代の iPod ではうまくいきます。

アプリケーションにステータス バーがまったく表示されず、info.plist ファイルで、対応するエントリ「ステータス バーは最初は非表示」が YES に設定されています。

また、MPMoviePlayerController ビューをその親ビューに直接追加します。ムービー プレーヤーをセットアップするコードは次のとおりです。

moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:theurl];
[moviePlayer.view setFrame:frame]; // This is set to (0, 0, 320, 480)
[moviePlayer prepareToPlay];
[moviePlayer setShouldAutoplay:YES]; 
moviePlayer.fullscreen = TRUE;
moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
[self.view addSubview:moviePlayer.view];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playBackFinished:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer]; 

moviePlayer はクラス変数です。

プレーヤーが再生を終了するか、視聴者が moviePlayer コントローラーの「完了」ボタンを押すと、playbackFinished:メソッドが呼び出されます。

- (void)playBackFinished:(NSNotification *)notif{
moviePlayer.controlStyle = MPMovieControlStyleNone;
[moviePlayer stop];
[moviePlayer.view removeFromSuperview];

[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
[moviePlayer release];
moviePlayer = nil;
}

moviePlayer のコントロール スタイルは、コントロールMPMovieControlStyleNoneを禁止するように設定されていますが、基本的には、moviePlayer が親ビューから削除されたときにステータス バーが表示されません。

于 2013-09-19T11:50:20.487 に答える