iPadでのYoutube最大化画面の制御

UIViewControllerを使いたくない主義のせいで、
Youtubeのフルスクリーンの制御で若干はまったのでメモ。


iPadではembedタグを利用することで、UIWebView内に普通にYoutubeプラグインを埋め込むことができる。


YoutubeをUIWebViewに埋め込むと、自動で再生ボタンや最大化ボタンが表示され、
最大化ボタンを押すと、勝手に最大化した画面を出してくれるし、
最小化ボタンを押すと、勝手に元の位置とサイズに戻してもくれるのだけれど、
自動で表示される最大化画面が、デバイスの回転に対応しなかったり位置がずれることがあった。


内部で実際にYoutubeを再生しているのはYoutubePluginという複合クラスのようなんだけど、
プライベートなクラスなので、容易には触れなかった。
Youtube再生画面内の最大化ボタンをタップした瞬間をフックできればいいのだけど、
それも上手くいかなかった。(UIWebView/YoutubePluginはタップのイベントを受け付けないので)


◇結論

バイスの回転に対応するには


Youtubeを読み込むWebViewの親ビューのどこかでUIViewControllerを使う必要がある模様。
たとえばこんな感じで、「親ビューの階層内のどこか」でUIViewControllerを経由させる。

UIViewController *controller = [[UIViewController alloc] init];
controller.view = webParentView;
[self addSubview:[controller.view autorelease]];

WebViewの直近の親でControllerを使う必要はなくて、
むしろ後に最大化画面の位置とサイズを調整するためには、
なるべくUIWindowに近いところの親ビューをController経由にするほうがいい。

位置とサイズを調整するには


これはUIViewController経由でaddした「親ビューの」位置とサイズに従って追随する模様。
なのでUIDevice等から画面の回転イベントを受け取って、
Controllerを挟んだ親ビューの位置とサイズを調整すれば自動で追随してくれる。