質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

5513閲覧

[Swift]動画を横画面で再生

RioNishino

総合スコア36

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2015/05/12 09:25

基本的には縦画面固定で、動画をフルスクリーンで再生するときだけ横画面を許可したいのですが、方法はありますでしょうか?

WebViewでInstagramの画像やYoutubeの動画を表示しており、そこでは縦画面で固定しているのですが、Youtubeの動画を再生するときだけは、横画面表示を許可したいです。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

質問者さんが質問されたことには私もかなり苦戦しました
以下は、私がxcode8のswift2.3(本当はswift3.0なのですが、Build SettingsのSwift Compiler versionででUse Legacy Swift Language versionをYesにしています)で実装してうまくいった方法です(非常に回りくどいので確実にもっといい方法があるでしょうが…)
ただ、画面の回転可能性の設定に関しては、swiftのバージョンやiosのバージョンによっても方法がかなり異なり、うまくいったりいかなかったりするので、注意が必要です
方法の概要は、まず一旦全方向の回転を許可しておき、回転を禁止するビューにはそれぞれ回転を禁止する処理を書きます。次に、動画を表示するビューは最初は回転を禁止し、画面が全画面になったことを検知して回転を許可します。
先に参考になったページを載せておきますね
How to lock viewController in Portrait mode -stack overflow

  1. まず[アプリ名]→General→Deployment Info→Device Orientation のチェックボックスの「Portrait」と「Landscape Left」と「Landscape Right」にチェックを入れてください

(一旦全ての方向の回転を許可します)
2. AppDelegate.swift内のAppDelegateクラス直下に、以下を書き込んでください

swift

1var shouldSupportAllOrientation = false 2 func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask { 3 if (shouldSupportAllOrientation == true){ 4 return UIInterfaceOrientationMask.All 5 } 6 return UIInterfaceOrientationMask.Portrait 7 }

3.回転を全面禁止するビューのviewControllerの、viewWillAppearメソッドの中に、以下を書き込んでください。これにより回転を禁止します

swift

1 //回転禁止 2 let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate 3 appdelegate.shouldSupportAllOrientation = false

4.次に全画面表示になったことを検知しましょう。動画を再生するviewControllerのviewDidLoadメソッド内に、以下を書き込んでください

swift

1//全画面表示になったことを検知 2//wideViewメソッドはあとで書きます 3NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.wideView), name: UIWindowDidBecomeKeyNotification, object: nil)

これにより、同じクラス内の、wideViewメソッドが呼ばれます。ただし、このnotificationは**「全画面になった時」と「全画面を閉じた時の両方呼ばれる**ので、注意が必要です

5.wideViewメソッドを定義する前に、二つほど準備があります
まず、変数名はどうでもいいですが、canRotateIntという変数を定義します。
これは、1の時回転不可、-1の時回転可能になるようにします。(このようにすることでうまいこといきます)
これをまずクラス変数として定義し、初期値は1とします。

swift

1 var canRotateInt = 1 //1は回転不可、−1は回転可能

次に、rotateSetという、canRotateIntの値に従って画面の回転可能性を司るメソッドを定義します。

swift

1//画面の回転可能性の設定 2 func rotateSet(rotateInt: Int){ 3 let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate 4 if rotateInt == 1{ 5 //強制的に縦表示に戻す 6 appdelegate.shouldSupportAllOrientation = false 7 let value = UIInterfaceOrientation.Portrait.rawValue 8 UIDevice.currentDevice().setValue(value, forKey: "orientation") 9 }else{ 10 //回転を許可する 11 appdelegate.shouldSupportAllOrientation = true 12 } 13 }

また、動画再生画面に遷移してきた時はまだ回転可能にしたくないので、viewDidLoadメソッド内で、

swift

1 rotateSet(1)

と書き、初めは回転を禁止しておきます。

6.最後に、wideViewメソッドです。同じく動画を再生するviewControllerの中に以下のメソッドを追加してください

swift

1//全画面表示になった時に呼び出される処理 2 func wideView(){ 3 //回転可能と不能を切りかえる 全画面になる時と閉じる時の両方呼ばれるからこうしなきゃいけない 4 canRotateInt = canRotateInt*(-1) 5 rotateSet(canRotateInt) 6 }

先述のようにwideViewメソッドは全画面になった時と全画面を閉じた時の両方呼ばれるので、canRotateIntを-1倍することで、回転可能と回転禁止を切り替えることができます。

私はまだまだswift初心者なので、コードが非常に回りくどく、面倒なものになってしまいましたが、私の環境下では実行できました!

投稿2016/12/04 16:19

hiromichikamata

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問