再生ボタンと映画の表示の間の遅延
-
29-09-2019 - |
質問
ユーザーがボタンを押したときにMPMoviePlayerviewControllerを作成する簡単なビューがあり、MoviePlayerviewControllerAnimated:Methodを使用してボタンを押します。新しいビューコントローラーがスライドし、映画プレーヤーを示しています。
ただし、ボタンが押されると、現在のビューコントローラーが底をスライドし、醜い(おそらくデフォルトの)白いビューを表示します。これは、ムービービューコントローラーが表示されるまで、0.5秒から数秒の秒のどこにでも貼り付けられます。ムービービューコントローラーがプレーヤーを表示する前に映画の一部をダウンロードしているかのように、それは私のネットワーク接続に依存しているようです。
私は何か間違ったことをしていますか、それともどうすればこれを回避できますか?私は本当に映画ビューコントローラーを直接見せたいだけです。おそらく、再生ボタンを保持していたが、モーダルビューコントローラーのようにアニメーション化された以前のビューコントローラーをスライドさせないかもしれません。
ありがとう!
クリストフ
解決 2
ビューの背景を黒に設定するだけでした。遅延を修正しませんが、見た目がずっと良くなります。
theMovieVC.view.backgroundColor = [UIColor blackColor];
他のヒント
解決策は、親ビューが作成されたときにプレーヤービューコントローラーを開始し、次に電話をかけることでした prepareToPlay
に moviePlayer
その中。これにより、再生ボタンがプッシュされたときのレイテンシが削除され、(私が推測する)ユーザーが映画を再生できる親ビューに到達したときに移動します。
編集:これにより遅延が削除されますが、何らかの理由で、ムービービューコントローラーの初期化もロードされたときに自動再生するため、それは良い解決策ではありません。
これは私が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では、必要なものをインスタンス化できます(たとえば、uiactivityindicatorView)。ビューコントローラーは、プリロードが完了したときにのみ交換されます。
アプリで同じ問題に気づいています。誰かがこの問題を避けるための提案を持っていますか?
私の場合、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];