5

我正在尝试在 a 中播放 YouTube 视频UIWebView(请参见下面的代码)。

一切正常,但 YouTube 播放器不支持 iOS 6 上的方向更改。我的整个应用程序仅处于纵向模式。

我该如何解决这个问题?任何帮助表示赞赏。

我正在使用的代码如下:

- (void)viewDidLoad

{        
   [super viewDidLoad];
   float width = 300.0f;
   float height = 300.0f;
   youTubeURL = @"http://www.youtube.com/embed/ZiIcqZoQQwg"; 
   UIWebView *wv = [[UIWebView alloc] init];
   wv.frame = CGRectMake(10, 80, width, height);

   NSMutableString *html = [[NSMutableString alloc] initWithCapacity:1] ;
   [html appendString:@"<html><head>"];
   [html appendString:@"<style type=\"text/css\">"];
   [html appendString:@"body {"];
   [html appendString:@"background-color: black;"];
   [html appendString:@"color: white;"];
   [html appendString:@"}"];
   [html appendString:@"</style>"];
   [html appendString:@"</head><body style=\"margin:0\">"];
   [html appendFormat:@"<embed id=\"yt\" src=\"%@\"", youTubeURL];
   [html appendFormat:@"width=\"%0.0f\" height=\"%0.0f\"></embed>", 300.0f, 300.0f];
   [html appendString:@"</body></html>"];
   [wv loadHTMLString:html baseURL:nil];
   [self.view addSubview:wv];  
}
4

2 回答 2

3

您将要做的如下所示...

首先在 viewdidLoad 中做一个通知,当你旋转你的设备时会调用它。

-(void)ViewDidLoad
{
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(rotate:)
                                             name:UIDeviceOrientationDidChangeNotification
                                           object:nil];
}

现在通知将调用名为“rotate:”的方法,因此我们必须像下面那样实现该方法。

#pragma mark - Rotate Screen Method
- (void)rotate:(NSNotification *)n {

switch ([[UIDevice currentDevice] orientation]) {
    case UIDeviceOrientationLandscapeLeft:
        yourwebview.transform = CGAffineTransformMakeRotation(M_PI / 2);
        yourwebview.frame = CGRectMake(0, 0, 768, 1024);//you can set any frame
        break;
    case UIDeviceOrientationLandscapeRight:
        yourwebview.transform = CGAffineTransformMakeRotation(-M_PI / 2);
        yourwebview.frame = CGRectMake(0, 0,768, 1024);//you can set any frame
        break;
    case UIDeviceOrientationPortrait:
        yourwebview.transform = CGAffineTransformIdentity;
        yourwebview.frame = CGRectMake(0, 0, 768, 1024);//you can set any frame
        break;
    case UIDeviceOrientationPortraitUpsideDown:
        yourwebview.transform = CGAffineTransformMakeRotation(M_PI);
        yourwebview.frame = CGRectMake(0, 0, 768, 1024);//you can set any frame
        break;
    default:
        break;
   }
 }

就是这样。

于 2013-06-06T06:39:33.413 回答
2

如果您需要纵向和横向支持,则必须在“目标”-> 摘要->“支持的界面方向”下设置应用程序支持的模式。

您加载播放器的代码是正确的。您只需要单独添加方向支持。

如果您使用自动布局,请检查 xib 中的约束。如果没有,则按照 NiravPatel 所述,在每个方向更改时为 Web 视图设置框架。

如果您只想旋转一个视图控制器,请在所有视图控制器中添加:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOr‌​ientation { return NO; }

您可以在应该旋转的 Viewcontroller 上返回 YES,在其他 viewController 上返回 NO。

于 2013-06-06T07:01:08.833 回答