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

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

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

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

769閲覧

iPadでの画面回転時のstatusBarOrientationの値がおかしい

street

総合スコア34

iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2018/03/23 14:58

お世話になります。

主題の件、デバイスの画面回転時に各Viewのサイズを変更するようにしています。
画面回転の検知ではNSNotification.Name.UIDeviceOrientationDidChangeを使用してUIApplication.shared.statusBarOrientationを取得して縦向きか横向きかを確認しているのですが、iPhoneとiPadで挙動が真逆になります。

■環境
・Xcode9.2
・swift4
・iPhoneシミュレータ、iPadシミュレータ
・GeneralのDeviceOrientationはPortrait/UpsideDown/LandscapeLeft/LandscapeRight共にチェック済み

swift

1override func viewDidLoad() { 2 super.viewDidLoad() 3 4 // ■ 画面向きの検知. 5 NotificationCenter.default.addObserver(self, selector: #selector(self.onOrientationChange_(notification:)), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil) 6} 7 8// 端末の向きがかわったら呼び出される. 9@objc private func onOrientationChange_(notification: NSNotification){ 10 let deviceOrientation: UIInterfaceOrientation! = UIApplication.shared.statusBarOrientation 11 print("isPortrait:(deviceOrientation.isPortrait) isLandscape:(deviceOrientation.isLandscape)") 12}

■ 現象
・iPhone
縦向き(ホームボタンが上下)
deviceOrientation.isPortrait = true, deviceOrientation.isLandscape = false
横向き(ホーム画面が左右)
deviceOrientation.isPortrait = false, deviceOrientation.isLandscape = true
→ 問題ありません。

・iPad
縦向き(ホームボタンが上下)
deviceOrientation.isPortrait = false, deviceOrientation.isLandscape = true
横向き(ホーム画面が左右)
deviceOrientation.isPortrait = true, deviceOrientation.isLandscape = false
→ iPhoneの挙動と真逆になる。

なお、viewDidLoadが呼ばれた際にiPadの挙動を確認したところ、iPhoneと同じで問題ありませんでした。
回転検知時のみなぜか値が逆になります。

iPadで回転向き確認する場合はiPhoneの挙動の逆で判定しなければいけないのでしょうか?また画面サイズの向きを確認しなければいけないのでしょうか?

すみませんがご教示お願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

UIDeviceOrientationを使うといかがでしょうか?

参考記事:
https://qiita.com/toshi0383/items/9b3bcd75647c7022d2e9
https://qiita.com/www51k/items/7be9abff8f6efea5748e

投稿2018/03/23 22:14

newmt

総合スコア1277

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

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

street

2018/03/24 01:44

ありがとうございます。 UIDeviceOrientationの場合、iPadを寝かすとdeviceOrientation.isPortraitとdeviceOrientation.isLandscapeがfalseになりました。 教えていただいた文献を辿って調べたところUIApplication.shared.statusBarOrientationで画面回転検知する際はNSNotification.Name.UIApplicationDidChangeStatusBarOrientationを用いることで正しい値が取れました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問