iPad SDK: встроенный фильм YouTube воспроизводит полноэкранную версию за UIWebView - PullRequest
7 голосов
/ 23 ноября 2010

У меня есть UIWebview в UIScrollView.В веб-просмотре у меня есть встроенный фильм YouTube.При воспроизведении фильма на YouTube все работает нормально, однако, когда я нажимаю полноэкранную кнопку, фильм начинает воспроизводиться за веб-обзором.Вывод WebView на передний план не работает, потому что я хочу, чтобы возможности ScrollView для прокрутки делали горизонтальную прокрутку.

Ответы [ 3 ]

12 голосов
/ 01 февраля 2011

По сути, вы хотите быть в состоянии определить, когда фильм начинает воспроизводиться в полноэкранном режиме, и соответствующим образом упорядочить свои представления. Затем, когда закончится полноэкранное воспроизведение, вы захотите вернуть свои представления к тому, как они есть.

Проблема в том, что нет документированного способа подключиться или обнаружить, когда UIWebView запускает воспроизведение видео в полноэкранном режиме.

Я сказал «документированным способом», потому что есть некоторые уведомления, которые вы можете использовать, чтобы определить, когда UIWebView запускает полноэкранное воспроизведение. Вы можете просто прислушиваться к ним и соответствующим образом изменить свое мнение. Однако я не обязательно рекомендую это, потому что они недокументированы и подвержены изменениям (фактически, в них есть орфографическая ошибка вплоть до iOS 4.3, см. Ответы ниже).

// For iOS 4.3 and above:
UIMoviePlayerControllerDidEnterFullscreenNotification
UIMoviePlayerControllerDidExitFullscreenNotification   

// For iOS 4.2 and below:
UIMoviePlayerControllerDidEnterFullcreenNotification
UIMoviePlayerControllerDidExitFullcreenNotification   // (note spelling mistake)

Обнаружить их было немного больно - на самом деле есть еще несколько уведомлений, которые запускаются при воспроизведении видео YouTube в UIWebView. Чтобы их выяснить, вам нужно сбросить точку останова при всех публикациях уведомлений, а затем вручную проверить места в памяти этих уведомлений, чтобы выяснить их строковые имена. Я на самом деле не думаю, что кто-то вытащил их раньше, потому что когда я их гуглю, я ничего не получаю. Но они работают, обещают!

Я надеюсь, что возможность получать уведомления при входе / выходе в полноэкранном режиме будет полезной, с огромным предупреждением о том, что Apple может изменить это недокументированное поведение в любое время. Ваше приложение не будет отклонено за их использование (потому что вы не вызываете никаких недокументированных методов), и я использовал его для доставки приложений. Но это все еще не лучшая идея в мире ... может быть, единственный вариант, который у вас есть.

Редактировать: Чтобы уточнить, исходя из комментария ниже: они не являются константами, поэтому вам нужно будет поместить их в кавычки, если вы были зарегистрированы для уведомлений.

6 голосов
/ 10 октября 2011

Для iOS 4.3+ Apple изменила названия этих уведомлений: UIMoviePlayerControllerDidEnterFullcreenNotification теперь является UIMoviePlayerControllerDidEnterFullscreenNotification

UIMoviePlayerControllerDidExitFullcreenNotification теперь является UIMoviePlayerControllerDidExitFullscreenNotification

Обратите внимание: термин «полноэкранный» изменен на «полноэкранный».

Спасибо!

2 голосов
/ 16 июня 2011

Просто хотел подтвердить, что это работает, поиграв с ним некоторое время. Вы можете получить прямой доступ к представлению, в котором воспроизводится видео. Это блочный метод регистрации уведомления и извлечения соответствующих представлений.

Примечание. Вам потребуется отложить добавление подпредставлений и / или получить доступ к внутренним подпредставлениям Apple, чтобы удалить панель навигации для дальнейшей настройки.

[[NSNotificationCenter defaultCenter] 
    addObserverForName:@"UIMoviePlayerControllerDidEnterFullcreenNotification" 
    object:nil 
    queue:nil
    usingBlock:^(NSNotification *note){
          MPMoviePlayerController *theMovieController = [note object];
          UIView *theDestinationVideoView = [[note userInfo] 
          objectForKey:@"UIMoviePlayerControllerFullscreenViewUserInfoKey"];
}];
...