moviePlayerController の ActivityIndicator を非表示にする
-
13-09-2020 - |
質問
ご存知のとおり、 MPmoviePlayerController でムービーを再生すると、moviePlayer のビューの中央に activityIndicatorView が表示されます。さて、プログラムにカスタム activityIndicatorView を追加しました。MPMoviePlayController の activityIndicatorView を非表示または削除したいだけですが、それはできますか?
解決
はい、できます!
あなたがやりたいのは、ムービーの再生中ではなく、ムービーのロード中にアクティビティインジケーターを表示することだと思いますか?私はそれを想定してそのまま進みます...
SDK 3.2 以降では、MPMoviePlayerController (および MPMoviePlayerViewController) 全体が以前のバージョンよりもはるかに優れています。まだ MPMoviePlayerController を使用している場合は、MPMoviePlayerViewController (基本的に MPMoviePlayerController オブジェクトをカプセル化する UIView サブクラス) に切り替えることを検討してください。
とにかく、UIActivityindicator ビューを表示または非表示にするには、ロードまたはプレイステータスの変更時に MPMoviePlayerController から送信される通知に接続することをお勧めします。
そのうちのいくつかは次のとおりです。
MPMoviePlayerPlaybackStateDidChangeNotification
MPMoviePlayerLoadStateDidChangeNotification
したがって、次のようにしてこれらのイベントに接続します。
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(loadStateChanged:)
name: MPMoviePlayerLoadStateDidChangeNotification
object: moviePlayerViewController.moviePlayer];
この
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(playBackStateChanged:)
name: MPMoviePlayerPlaybackStateDidChangeNotification
object: moviePlayerViewController.moviePlayer];
ハンドラー内では (playBackStateChanged
そして loadStateChanged
)
次のようなことができます:
-(void)playBackStateChanged:(id)sender
{
MPMoviePlaybackState playbackState = [moviePlayerViewController.moviePlayer playbackState];
switch (playbackState) {
case MPMoviePlaybackStateStopped :
break;
case MPMoviePlaybackStatePlaying :
[yourActivityIndicatorView stopAnimating];
break;
case MPMoviePlaybackStateInterrupted :
[yourActivityIndicatorView startAnimating];
break;
}
}
IndicatorView の "hidesWhenStopped" (または同様の) プロパティが Yes に設定されていることを確認してください (そうすれば、コントロールの非表示と再表示を気にする必要がなくなります)。
残りは簡単で、MPMovieViewController のビューの上に activityIndicatorView を追加するだけです。
私が手助けできれば幸いです
乾杯
サム