LoginSignup
12

More than 5 years have passed since last update.

UIDeviceOrientationの謎tips

Last updated at Posted at 2015-11-10

UIDeviceOrientationの謎tipsになります。

忙しい人のためのアレ

  • iOS9のiPadではUIDeviceOrientation.FaceUp .FaceDownが取得できなくなっている模様です
  • LandscapeのときにUIApplication.sharedApplication().statusBarOrientationUIDevice.currentDevice().orientation が返す値はRightとLeftが逆になる
  • ビューのレイアウトをUIDeviceOrientationに追従させてはいけません

OS9のiPadではUIDeviceOrientation.FaceUp .FaceDownが取得できなくなっている模様です

iOS9のiPad系ではFaceUpとFaceDownが取れないようです。
UIDevice Class Referenceにも特に記述がなく。

下記の2通りの方法で確認しました。

  • UIDeviceOrientationDidChangeNotificationの通知
  • UIDevice.currentDevice().orientation
端末 OS FaceUp FaceDownとれた
iPad mini iOS8 YES
iPad mini 2 iOS8 YES
iPad Air iOS7 YES
iPad mini 2 iOS9 NO
iPad mini 4 iOS9 NO
iPad Air 2 iOS9 NO

手元のデバイスでも確認したい方はこちらのサンプルをどうぞ。
https://github.com/toshi0383/OrientationSample

これ、意外と困る人いるのでは?謎です。
iPhoneはiOS9でも大丈夫でした。

LandscapeのときにUIApplication.sharedApplication().statusBarOrientationUIDevice.currentDevice().orientation が返す値はRightとLeftが逆になる

このように。知っている人は知っているみたいですね。
ss.PNG

statusBarOrientationはホームボタンの位置、DeviceのOrientationはカメラの位置を指しているようです。
つまりこれは、iPhoneを右に傾けた状態です。

なにかの意図があるのでしょうか。まったくもって謎です。

追記:UIApplication.hのヘッダファイルに記載がありました。

// Note that UIInterfaceOrientationLandscapeLeft is equal to UIDeviceOrientationLandscapeRight (and vice versa).
// This is because rotating the device to the left requires rotating the content to the right.

だそうです。

ビューの回転をUIDeviceOrientationに追従させてはいけません

最後にこれは特に謎ではないんですけど、
今日たまたま、UIDeviceOrientationDidChangeNotificationを契機に回転時のレイアウト処理をしているライブラリを使っていることによるバグに遭遇しました。
ポップオーバーが出ている状態でデバイスを回転しまくるとレイアウトが崩れるというやつです。
このライブラリはもう1年以上放置されていてiOS9とかもちろん対応していないしそらまともに動かんのだろうなーとか思っていたんですが、そういうレベルではなかったので共有したくなったというのがこのまとめのそもそもの動機でした。まとめる過程で上記の謎が出てきてしまいモヤモヤしましたが。。

そもそもの動機はそうなんですが、UIInterfaceOrientation使いましょうねというのが言いたかっただけなのでこれで以上になります。

おわり

最近は、Objective-Cで書かれた有名なライブラリでもだんだんメンテされなくなっているようで、既存のレガシーなアプリは結構辛い時期かもしれませんね。

まあこの記事を読んでいるような優秀なエンジニアの皆さんのところのイマドキなアプリだときっとSizeClassごとに気の利いたAdaptive Layoutがバッチリキマっていて orientation でプロジェクトをgrepしてもヒットしなかったりするんでしょうから、関係ないですね!😎

それではみなさま楽しいプログラミングライフを。

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
12