当进入全屏时,嵌入在UIWebView中的Youtube会导致iPad崩溃

时间:2012-07-19 07:01:13

标签: objective-c ios ipad youtube hang

我正在尝试在通用应用中混合使用this techniquethis Youtube SDK blog post来嵌入Youtube视频。 iPhone版本使用相同的代码,工作正常。 在iPad上,视频会嵌入,并且在嵌入式窗体中播放效果很好,但只要点击全屏按钮,应用程序就会崩溃(按钮不响应,设备不会旋转)。来自Youtube视频的音乐一直在播放。

没有记录错误消息,但应用确实注册为“暂停”或挂在xCode中。每次崩溃com.apple.libdispatch-manager都在线程2.问我问题,我会给你更多关于错误的信息,但我不知道从哪里开始。

我试过了:

  • 更改UIWebView框架的大小
  • UIWebView位于UIScrollView中,但如果我将其从滚动视图中删除并将其添加到视图中,则问题是相同的。
  • 更改视频
  • 将我在UIWebView中使用的html从this更改为this,但没有结果
  • 将youtube链接的格式从?v = uniqueID更改为/ v / uniqueID
  • 检查呈现视图是rootviewcontroller(它是,但视频嵌入在一个模态中,而不是rootviewcontroller)。

我正在为iOS 5.1构建,如果在iOS6上运行则不会发生这种情况。

视频嵌入的视图是模态的,包括手机和iPad。应用程序中没有任何hackery或不寻常的事情发生。

似乎有人说Evernote的应用程序有similar problem,但我不知道它是否相关。

供您参考,这里是YouTubeView子类(它是UIWebView的子类):

- (YouTubeView *)initWithStringAsURL:(NSString *)urlString frame:(CGRect)frame;
{
    if (self = [super init]) 
    {
        // Create webview with requested frame size
        self = [[YouTubeView alloc] initWithFrame:frame];

// HTML to embed YouTube video
//      NSString *youTubeVideoHTML = @"<html><head>
//                                       <body style=\"margin:0\">
//                                         <embed id=\"yt\" src=\"%@\"
//                                                type=\"application/x-shockwave-flash\"
//                                                width=\"%0.0f\" height=\"%0.0f\">
//                                         </embed>
//                                       </body>
//                                     </html>";

        NSString *youTubeVideoHTML = @"<html><head><meta name = \"viewport\" content = \"initial-scale = 1.0, user-scalable = no, width = %0.0f\"/></head><body style=\"background:#FFF;margin-top:0px;margin-left:0px\"><div><object width=\"%0.0f\" height=\"%0.0f\"><param name=\"movie\" value=\"%@\"></param><param name=\"wmode\" value=\"transparent\"></param><embed src=\"%@\"type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"%0.0f\" height=\"%0.0f\"></embed></object></div></body></html>";

        // Populate HTML with the URL and requested frame size
//      NSString *html = [NSString stringWithFormat:youTubeVideoHTML, urlString, frame.size.width, frame.size.height];

        NSLog(@"html:\n %@", youTubeVideoHTML);

        NSString *html = [NSString stringWithFormat:youTubeVideoHTML, frame.size.width, frame.size.width, frame.size.height, urlString, urlString, frame.size.width, frame.size.height];

        NSLog(@"html:\n %@", html);

        // Load the html into the webview
        [self loadHTMLString:html baseURL:nil];
    }

    return self;
}

1 个答案:

答案 0 :(得分:2)

iOS 5.0和iOS 5.1上的模态视图是导致全屏视频AFAIK崩溃的问题。他们刚刚更改了该版本iOS(parentViewControllerpresentingViewController)中的视图层次结构,这就是后果。我很久以前就问了here,还有一个问题是here,但仍然没有人知道该怎么做。

首先,他们将其修复为6.0,我猜,这很好。

对于5.1,我们稍微改变了设计并避免了模态视图。如果在您的情况下可行,请这样做。