が実行されます。AVAssetの「isPlayable」/「再生可能」チェック・ブロックや遅延UIアップデート
self.loadingView.frame = _frameWhereItShouldBeLocated;
[self.loadSpinner startAnimating]; // self.loadSpinner is an UIActivityIndicatorView
self.loadingView.hidden = FALSE;
AVPlayer *player = [AVPlayer playerWithURL:fileUrl]; // fileUrl is where is the video file is hosted, which is not a local path
if ([player.currentItem.asset isPlayable])
{
if (!self.playerController) {
self.playerController = [[AVPlayerViewController alloc] init];
self.playerController.transitioningDelegate = self;
self.playerController.modalPresentationStyle = UIModalPresentationCustom;
}
self.playerController.player = player;
self.playerController.showsPlaybackControls = TRUE;
[self.navigationController presentViewController:self.playerController animated:YES completion:nil];
[self.playerController.player play];
}
を
ユーザーのタップ直後に読み込みビューが表示され、しばらくしてからプレーヤーコントローラーが表示され、ビデオが再生されると思います。ただし、読み込みビューが表示されるまでにはかなりの遅延があります。
これは私が期待したものである:
User tap -> loading view shown -> (some time for loading the video, etc) -> play video
代わりに、これは私が持っているものである:すなわち
User tap -> (significant time delay) -> loading view shown -> play video
いくつかのデバッグ後、私は、遅延が[player.currentItem.asset isPlayable]
呼び出しによって引き起こされることがわかりました読み込みビューは、呼び出しが返された後にのみ表示されます。私はdispatch_async
コールでローディングビューの表示の下にセグメントを置こうとしましたが、それは変わりません。
これを処理して期待通りに動作させるにはどうしますか?
ありがとうございます!
答えはAVAsynchronousKeyValueLoadingの導入である。https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVAsynchronousKeyValueLoading_Protocol/index.html –