0

presentMoviePlayerViewControllerAnimated:メソッドを使用して、ユーザーがボタンを押したときにMPMoviePlayerViewControllerを作成する単純なビューがあります。新しいViewControllerがスライドインして、ムービープレーヤーを表示します。これまでのところ、非常に優れています。

ただし、ボタンを押すと、現在のビューコントローラが下にスライドし、ムービービューコントローラが表示されるまで、0.5秒から数秒の間どこにでも表示される醜い(おそらくデフォルトの)白いビューが表示されます。まるで映画鑑賞コントローラーがプレーヤーを表示する前に映画の一部をダウンロードしているかのように、それは私のネットワーク接続に依存しているようです。

私は何か間違ったことをしていますか、それともどうすればこれを回避できますか?再生ボタンを保持している前のViewControllerをスライドさせなくても、映画のView Controllerを直接表示したいのですが、それでもモーダルViewControllerのようにアニメーション化されます。

ありがとう!

クリストフ

4

4 に答える 4

0

解決策は、親ビューの作成時にプレーヤービューコントローラーを初期化し、prepareToPlayそのmoviePlayer内部を呼び出すことでした。これにより、再生ボタンが押されたときの待ち時間がなくなり、(おそらく)ユーザーが映画を再生できる親ビューに到達したときに待ち時間が移動します。

編集:これは遅延を取り除きますが、何らかの理由で、ムービービューコントローラを初期化すると、ロード時に自動再生されるため、これは良い解決策ではありません。

于 2010-10-30T21:39:45.867 に答える
0

ビューの背景を黒に設定するだけで終わりました。遅延は修正されませんが、見栄えがよくなります。

  theMovieVC.view.backgroundColor = [UIColor blackColor];
于 2010-11-13T22:25:00.963 に答える
0

これは私がiOS>3.2で行うことです:

- (void) play {
    mMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:mMovieURL];

    if ([mMoviePlayer respondsToSelector:@selector(loadState)]) 
    {
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(moviePreloadDidFinishIOS32:) 
                                                     name:MPMoviePlayerContentPreloadDidFinishNotification 
                                                   object:nil];


        [mMoviePlayer prepareToPlay];
        [mMoviePlayer play];
        mMoviePlayer.controlStyle = MPMovieControlStyleEmbedded;
        [mMoviePlayer setMovieControlMode:MPMovieControlModeDefault];
        [mMoviePlayer setBackgroundColor:[UIColor clearColor]];
    }
}

- (void) moviePreloadDidFinishIOS32:(NSNotification*)notification;
{
    // Remove observer
    [[NSNotificationCenter  defaultCenter] 
     removeObserver:self
     name:MPMoviePlayerContentPreloadDidFinishNotification
     object:nil];

    self.view = mMoviePlayer.view;
}

したがって、viewdidloadで、必要なもの(UIActivityIndi​​catorViewなど)をインスタンス化できます。ビューコントローラは、プリロードが終了したときにのみ交換されます。

于 2010-11-18T18:15:31.323 に答える
0

アプリで同じ問題に気づいています。この問題を回避するための提案はありますか?

私の場合、MPMoviePlayerViewControllerをモーダルポップアップとしてUIにプッシュしています。

// build the movie player
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
MPMoviePlayerViewController *movieViewController = [[[MPMoviePlayerViewController alloc] initWithContentURL:request.URL] autorelease];
[movieViewController.moviePlayer prepareToPlay];
movieViewController.view.backgroundColor = [UIColor blackColor];

// show the movie player view
[self.parentViewController presentModalViewController:movieViewController animated:YES];
于 2011-02-02T23:25:49.707 に答える