Скрыть ActivityIndicator в moviePlayerController
-
13-09-2020 - |
Вопрос
Как вы знаете, когда я проигрываю фильм с MPMoviePlayerController, MoviePlayer должен показывать activityIndicatorView в центре Movieplayer'view.Теперь, я поместил пользовательский activityIndicatorView в свою программу, я просто хочу скрыть или удалить activityIndicatorView MPMoviePlayController, могу ли я это сделать?
Решение
да, мы можем!
Я предполагаю, что вы хотите сделать, это показать идентификатор активности во время загрузки вашего фильма, а не во время его воспроизведения?Я просто предполагаю это и продолжаю идти...
в SDK 3.2 и выше весь MPMoviePlayerController (и MPMoviePlayerViewController) в целом намного лучше, чем в предыдущих версиях.Если вы все еще используете MPMoviePlayerController, вы могли бы рассмотреть возможность переключения на MPMoviePlayerViewController (который в основном является подклассом UIView, который инкапсулирует объект MPMoviePlayerController).
в любом случае, чтобы показывать и скрывать ваш вид 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;
}
}
убедитесь, что для свойства "hidesWhenStopped" (или аналогичного) вашего IndicatorView установлено значение yes (если вы это сделаете, вам не нужно заботиться о скрытии и показе элемента управления.
остальное просто, просто добавьте свой activityIndicatorView поверх представления вашего MPMovieViewController.
надеюсь, я смог бы помочь
ваше здоровье
сэм