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

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

新規登録して質問してみよう
ただいま回答率
85.31%
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

0回答

523閲覧

【Swift】画面遷移時に画面を回転させて表示したい

M.Kawashima

総合スコア1

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クリップ

投稿2023/06/05 07:40

編集2023/06/14 08:28

実現したいこと

画面遷移したときに、それぞれの画面に対応した向きに回転させて表示したい。

前提

iosアプリ開発の初心者です。縦画面と横画面の複数の画面からなるアプリを開発中ですが、下記の問題を自力で解決することができなかったので、どうすればよいのかご教授をお願いしたいです。

TabBarControllerを使用しており、各画面をTabを使い画面遷移します。それぞれ専用のPageViewControllerで管理しているGraphViewController(横画面)とTopViewController(縦画面)で遷移するときに、それぞれの画面に対応した向きに回転させて表示したいのですが、下記の問題が起きています。

イメージ説明

※各ControllerのUIはxibで作成しており、GraphViewControllerは横画面です。

マルチポストの理由

terarailのヘルプを確認していませんでした。
今後はマルチポストを行わないようにします。
https://ja.stackoverflow.com/questions/95115/swift-%e7%94%bb%e9%9d%a2%e9%81%b7%e7%a7%bb%e6%99%82%e3%81%ab%e7%94%bb%e9%9d%a2%e3%82%92%e5%9b%9e%e8%bb%a2%e3%81%95%e3%81%9b%e3%81%a6%e8%a1%a8%e7%a4%ba%e3%81%97%e3%81%9f%e3%81%84

発生している問題

ビルドして最初にTopViewControllerからGraphViewControllerに遷移したときは問題なく画面が回転され横画面で表示されますが、その後TopViewControllerに戻ったときに縦画面への回転がされず横画面のままで表示されています。

該当のソースコード

TabBarController

1class TabBarController: UITabBarController { 2 override func viewDidLoad() { 3 super.viewDidLoad() 4 } 5} 6 7extension UITabBarController { 8 open override var shouldAutorotate: Bool { 9 if let VC = selectedViewController { 10 return VC.shouldAutorotate 11 }else{ 12 return true 13 } 14 } 15 16 open override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 17 if let VC = selectedViewController { 18 return VC.supportedInterfaceOrientations 19 }else{ 20 return .portrait 21 } 22 } 23}

TopPageViewController

1class TopPageViewController: UIPageViewController { 2 override var shouldAutorotate: Bool { 3 if let VC = controllers.first { 4 return VC.shouldAutorotate 5 } 6 return false 7 } 8 9 override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 10 if let VC = controllers.first { 11 return VC.supportedInterfaceOrientations 12 } 13 return .portrait 14 }

TopViewController

1class TopViewController: UIViewController { 2 override var shouldAutorotate: Bool { 3 UIDevice.current.setValue(1, forKey: "orientation") 4 return false 5 } 6 7 override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 8 return .portrait 9 }

GraphPageViewController

1lass GraphPageViewController: UIPageViewController { 2 override var shouldAutorotate: Bool { 3 if let VC = controllers.first { 4 return VC.shouldAutorotate 5 }else{ 6 return true 7 } 8 } 9 10 override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 11 if let VC = controllers.first { 12 return VC.supportedInterfaceOrientations 13 }else{ 14 return .landscapeLeft 15 } 16 }

GraphViewController

1class GraphViewController: UIViewController { 2 override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 3 4 if(UIDevice.current.orientation.rawValue == 4){ 5 UIDevice.current.setValue(4, forKey: "orientation") 6 return .landscapeLeft 7 } 8 else { 9 UIDevice.current.setValue(3, forKey: "orientation") 10 return .landscapeRight 11 } 12 } 13 14 override var shouldAutorotate: Bool { 15 if(UIDevice.current.orientation.rawValue == 1){ 16 return false 17 } 18 else{ 19 return true 20 } 21 } 22 23override func viewDidLoad() { 24 super.viewDidLoad() 25 26 UIDevice.current.setValue(4, forKey: "orientation") 27 print(supportedInterfaceOrientations) 28}

試したこと

画面回転の実装に際し、以下の記事を参考にしました。

【Swift5】 特定画面で縦画面/横画面に固定させる
https://qiita.com/yannagi41/items/95b7210763489b109c9a

【Swift】一画面だけ横向き固定にする
https://freelance-style.net/%E3%80%90swift%E3%80%91%E4%B8%80%E7%94%BB%E9%9D%A2%E3%81%A0%E3%81%91%E6%A8%AA%E5%90%91%E3%81%8D%E5%9B%BA%E5%AE%9A%E3%81%AB%E3%81%99%E3%82%8B/

【Swift4】特定の画面で回転を制御する方法について、サンプルを作って理解する
https://qiita.com/orimomo/items/6ab57c6706a8dbc181a1

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

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

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

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

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

M.Kawashima

2023/06/06 14:54

追記 実機でテストしたところ、それぞれの画面が対応した向きに回転して表示され、私が実現したい挙動になっていました。一応シミュレーターでもう一度試したら、こちらでは以前として縦画面遷移時に回転してくれず、問題が解決されていませんでした。 なぜ実機とシミュレーターでこのような違いが起きるのでしょうか...
M.Kawashima

2023/06/14 08:46

本文にマルチポストの旨を追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問