如何将嵌入的YouTube视频旋转到横向模式

时间:2012-06-29 09:20:05

标签: ios youtube embed landscape uiinterfaceorientation

我正在使用以下嵌入代码在IOS上嵌入我的YouTube视频

- (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];

当我播放视频时,它只能在potrait模式下播放,而不能在横向模式下播放。这是否是由于'iframes'的限制,有什么方法吗?

4 个答案:

答案 0 :(得分:2)

如果您的UIViewController也能够旋转到横向,它应该可以工作。

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

在尝试旋转视频之前测试您的UIViewController是否能够旋转。如果您不希望UIViewController在视频不在屏幕上时能够旋转,您可以执行以下操作:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if(webView && webView.superView) return YES;
    return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}

答案 1 :(得分:0)

在你的UIViewController中,将其视图设置为webView:

  

[self setView:webView];

您的webview未收到发送到根视图控制器的轮换消息。如果您仅为WebView创建单独的View Controller,也可以使用addChildViewController方法。

答案 2 :(得分:0)

这与我刚刚回答的另一个问题Fix Notification center orientation after the app resume execution

几乎相同

YouTube视频有自己的UIViewController子类来呈现它们。他们实际上没有实现 - (BOOL)shouldAutorotateToInterfaceOrientation; (我知道)所以使用你目前所处的方向。

如果您的应用不会旋转到横向,那么它也不会处于横向状态。设置[UIApplication sharedApplication] .statusbarOrientation应设置Youtube视频的方向,但是如果您选择仅执行此操作,而不是实施Michael Frederick's建议(也是如此),则在视频出现时可能会产生一些异常的影响(如UI画像,但统计栏横向覆盖UI)。

答案 3 :(得分:0)

#define RADIANS(degrees) ((degrees * M_PI) / 180.0)

- (void) setTransformForCurrentOrientation {
    UIDeviceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    NSInteger degrees = 0;

    if (UIInterfaceOrientationIsLandscape(orientation)) {
        if (orientation == UIInterfaceOrientationLandscapeLeft) { degrees = -90; } 
        else { degrees = 90; }
    } else {
        if (orientation == UIInterfaceOrientationPortraitUpsideDown) { degrees = 180; } 
        else { degrees = 0; }
    }

    rotationTransform = CGAffineTransformMakeRotation(RADIANS(degrees));

    [UIView beginAnimations:nil context:nil];
    [webView setTransform:rotationTransform];
    [UIView commitAnimations];
}