この手法とこの Youtube SDK ブログ投稿をユニバーサル アプリに組み合わせて使用して、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 の両方でモーダルです。アプリでハッキングや異常なことが起こっているわけではありません。
Evernote のアプリでも同様の問題が発生しているという話があるようですが、関係があるかどうかはわかりません。
参考までに、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;
}