24
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UIWebViewでYouTube動画を全画面再生した場合に、ランドスケープ表示にも対応する方法

Posted at

iPhone用のアプリだと、ポートレート表示にのみ対応したアプリを作ることはまあ多いことだろうと思います。この場合に困るのは、UIWebViewでWebページを表示した場合に、その中にある動画もポートレートでしか再生できないことです。

「動画が横長なのに画面が回転できないなんて!星ひとつ!!」と言われたことはありませんが、不便に感じるのでできるだけ解消してあげたいところです。

UIWebViewの画面だけでも回転対応すればいいやんとか言われそうですが、まあ…なかなかそうもいかないのが社会のツラさです。

3行でわかる対応方法

単純な話なので結論を先に書きます。

  1. Info.plistのUISupportedInterfaceOrientationsで全画面回転対応しておく
  2. 各ViewControllerでshouldAutorotateの戻り値をNoにしたりとか回転を抑制する
  3. 申請する

わかってると5分でアップデート申請できます。具体的なやり方については、以下をご覧ください。

Info.plistの全画面回転対応

XcodeのビルドターゲットのGeneralってところにDevice Orientationsってのがあるので、Landscapeにチェックを入れます。これであなたのアプリはランドスケープ表示に対応するようになりました!

このまま動作して何の問題もないなら、それで解決みんなハッピーなんですけどね…。

xcode-targets-general.png

各ViewControllerで回転を抑制

各地のViewControllerに以下のメソッドを実装して、デバイスを回転させても画面が回転しないようにします。

- (BOOL) shouldAutorotate {
   return NO;
}

- (NSUInteger) supportedInterfaceOrientations {
   return UIInterfaceOrientationMaskPortrait;
}

UITabBarControllerとかUINavigationControllerなどのコンテナのViewControllerを使っている場合は、そちらで実装しておく必要があります。たとえばUITabBarControllerに実装しておけば、その中のViewControllerには実装しなくていいので楽です。ただしmodalなどを呼び出す場合はmodalのViewControllerにも実装しておく必要があります。

まあ普通にUITabBarControllerとUINavigationControllerを継承したクラスを作ってそちらで実装しておけば、ほとんど大丈夫じゃないでしょうか。(カテゴリを使ってもできますが、オリジナルのメソッドを変更するようなカテゴリはあんまり良くないと思います。)

今回の目的と外れますが、もし表示されているViewController毎に回転するかしないかを決めたいような場合は、UITabBarControllerの子供のViewControllersの戻り値を見るような処理にしないといけないです。Qiitaの記事があったので、興味があればご参照ください。

以上で対応は完了です。

この状態で動画を再生すると、ランドスケープで全画面表示できるようになるので「超ベンリです!星5個です!」とか言ってもらえるかもしれません。

24
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?