Как повернуть встроенное видео YouTube в ландшафтный режим

Я использую следующий код для встраивания видео с YouTube на IOS.

- (NSString*)embedYouTube:(NSString*)youtube_id frame:(CGRect)frame {  
   NSString* embedHTML = @"\
   <html><head>\
   <style type=\"text/css\">\
   body {\
   background-color: transparent;\
   color: white;\
   }\
   </style>\
   </head><body style=\"margin:0\">\
   <iframe src=\"http://www.youtube.com/embed/%@?rel=0\" frameborder=\"0\" allowfullscreen width=\"%0.0f\" height=\"%0.0f\"></iframe>\
   </body></html>"; 
   NSString *html = [NSString stringWithFormat:embedHTML, youtube_id, frame.size.width, frame.size.height];

   return html;
}

//code to embed video
NSString *contentHTML;
if (currentAnswer.youtube_id != nil) {
    contentHTML = [self embedYouTube:currentAnswer.youtube_id frame:CGRectMake(CELL_TEXT_LEFT_MARGIN + CELL_AVATAR_WIDTH + CELL_SPACING, currentYAxisValue, CELL_YOUTUBEVIEW_WIDTH, CELL_YOUTUBEVIEW_HEIGHT)];
}

[webView loadHTMLString: contentHTML baseURL:nil];

Когда я играю видео, оно воспроизводится только в портретном режиме, а не в ландшафтном. Это ограничение из-за «iframes», есть ли способ обойти это?


person Zhen    schedule 29.06.2012    source источник


Ответы (3)


Это должно работать при условии, что ваш UIViewController также может поворачиваться в альбомную ориентацию.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

Убедитесь, что ваш UIViewController может вращаться, прежде чем пытаться вращать видео. Если вы не хотите, чтобы ваш UIViewController мог вращаться, когда видео не отображается на экране, вы можете просто сделать что-то вроде:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if(webView && webView.superView) return YES;
    return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}
person Michael Frederick    schedule 02.07.2012
comment
Этот код не существует в моем основном UIViewController, фактически веб-представление для воспроизведения YouTube существует в uitableviewcell. Как мне обрабатывать ориентацию uiwebview в uitable? - person Zhen; 03.07.2012
comment
Вам все равно нужно поместить этот код в свой UIViewController (тот, который содержит ваш UITable) - person Michael Frederick; 03.07.2012

В вашем UIViewController установите его вид на webView:

[сам setView:веб-просмотр];

Ваш веб-просмотр не получает сообщения о вращении, отправленные на контроллер корневого представления. Вы также можете использовать метод addChildViewController, если вы создали отдельный контроллер представления исключительно для своего веб-представления.

person Aaron Brager    schedule 02.07.2012

Это почти то же самое, что и другой вопрос, на который я только что ответил: Исправить ориентацию Центра уведомлений после возобновления выполнения приложения

Видео YouTube имеют собственный подкласс UIViewController, который их представляет. На самом деле они не реализуют -(BOOL)shouldAutorotateToInterfaceOrientation; (что я знаю) и поэтому используйте любую ориентацию, в которой вы сейчас находитесь.

Если ваше приложение не поворачивается в альбомную ориентацию, оно также не будет в альбомной ориентации. Установка [UIApplication sharedApplication].statusbarOrientation должна установить ориентацию видео Youtube, однако, если вы решите сделать только это, а не реализовывать Michael Frederick's предложение (также), это может иметь некоторые необычные эффекты при выходе из видео (например, портрет пользовательского интерфейса, но ландшафт панели статистики, покрывающий пользовательский интерфейс).

person Kyle Howells    schedule 07.07.2012