#objective-c #video #mpmovieplayercontroller
#objective-c #Видео #mpmovieplayercontroller
Вопрос:
Я пытаюсь показать видео в своем приложении. Приложение скрывает верхнюю панель iPhone. Проигрыватель, похоже, работает нормально. Есть только одна досадная проблема: когда проигрыватель показывает видео, он иногда показывает верхнюю панель, а иногда скрывает ее. Когда он скрыт, панель видеопроигрывателя немного выдвигается (того же размера, что и панель, которая была там раньше). Является ли ошибка Apple? Я делаю что-то не так? Вот мой код:
- (void) showFullscreenMediaWithURL: (NSURL *) mediaURL
{
MPMoviePlayerViewController *ctrl = [[MPMoviePlayerViewController alloc] initWithContentURL: mediaURL];
[[NSNotificationCenter defaultCenter] addObserver:self selector: @selector(playbackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:ctrl.moviePlayer];
ctrl.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
ctrl.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[ctrl setWantsFullScreenLayout:YES];
[self presentMoviePlayerViewControllerAnimated:ctrl];
[ctrl release];
}
-(void) playbackDidFinish:(NSNotification*)aNotification
{
NSLog(@"Finished playback");
MPMoviePlayerController *player = [aNotification object];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification
object:player];
[player stop];
[self dismissMoviePlayerViewControllerAnimated];
[[captureManager session] startRunning];
}
Ответ №1:
если под верхней панелью iPhone вы подразумеваете строку состояния iPhone, то решение должно быть простым. Непосредственно перед present / dismissMoviePlayerViewControllerAnimated добавьте следующее:
// Hide Status Bar
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
// Show Status Bar
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
Обновление: я вижу, в чем, по-видимому, ваша проблема.
Во-первых, верхняя панель со значками сетевой индикации и другой информацией — это строка состояния (и ничего больше). Ваша проблема, похоже, больше связана с ViewController, чем с медиаплеером. Другими словами, если бы вы попытались «включить» какой-либо другой ViewController на весь экран (как у проигрывателя), у вас возникла бы точно такая же проблема.
Во-вторых, правильный способ, или я мог бы сказать: мой предпочтительный способ загрузки контроллера просмотра в полноэкранный режим заключается в следующем:
- Настройте полноэкранный RootViewController, который будет загружен в applicationDidFinishLaunchingWithOptions в вашем AppDelegate.
- При инициализации RootViewController установите ваш ViewController по умолчанию (тот, который вы использовали для загрузки из AppDelegate). Убедитесь, что рамка RootViewController.view заполняет экран.
- Создайте 2 сообщения в RootViewController: LoadFullscreen:ViewController и dismissFullscreen, используя present / dismissModelViewController. отсюда следует вызывать сообщения setStatusBarHidden.
- Чтобы включить проигрыватель на весь экран, создайте ViewController проигрывателя и выполните [RootViewController LoadFullscreen:player];
Есть несколько других способов, но, как правило, это лучшая практика и метод, который я рекомендую. Это относительно «много кода» для реализации, поэтому я не смог помочь вам с code snippers, но общая идея относительно проста.
Я надеюсь, что это поможет, например 🙂
Комментарии:
1. Я уже пробовал это. Это не работает. Все мое приложение не отображает строку состояния (оно скрыто при запуске приложения). Когда видео показывается, я вижу, что панель опускается без строки состояния. Когда я нажимаю на экран, отображается строка состояния.
2. Извините, все еще не могу понять, что вы имеете в виду. Экранное видео с симулятором iPhone было бы прекрасно… для этого вы можете использовать встроенное quicktime
3. Могу ли я опубликовать вложение изображения здесь? в любом случае, это очень просто: при просмотре видео вы все равно можете видеть верхнюю панель iPhone. Иногда он просто есть, а иногда его там нет, но пространство, предназначенное для панели, есть. Я не могу скрыть верхнюю панель: либо есть верхняя панель, либо есть место для панели. Кстати, на месте для панели вы также можете увидеть видео.