objective-c – 嵌入在UIWebView中的Youtube在进入全屏时会导致iPad崩溃

我正在尝试使用
this technique
this 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(它是,但视频嵌入在modal中,而不是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;
}

最佳答案 iOS 5.0和iOS 5.1上的模态视图是导致全屏视频AFAIK崩溃的问题.他们只是在那个版本的iOS(parentViewController和presentsViewController)中改变了视图的层次结构,这就是后果.我很久以前就问过
here和一个同样的问题是
here,但仍然没有人知道该怎么做.

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

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

点赞