web-dev-qa-db-ja.com

現在のインターフェイスの向きを取得する別の方法は?

私が知っている現在のインターフェイスの向きを取得するには、3つの方法があります。

  • self.interfaceOrientation
  • [[UIApplication sharedApplication] statusBarOrientation]
  • [[UIDevice currentDevice] orientation]

それらの違いは何ですか?

63
Anh Do

self.interfaceOrientationは、インターフェイスの現在の方向であるUIInterfaceOrientationを返します。これはUIViewControllerのプロパティであり、UIViewControllerクラスでのみこれにアクセスできます。

[[UIApplication sharedApplication] statusBarOrientation]は、アプリケーションのステータスバーの現在の方向であるUIInterfaceOrientationを返します。アプリケーションの任意のポイントでそのプロパティにアクセスできます。私の経験では、実際のインターフェイスの向きを取得するより効果的な方法であることを示しています。

[[UIDevice currentDevice] orientation]は、IDeviceOrientation、デバイスの向きを返します。アプリケーションの任意のポイントでそのプロパティにアクセスできます。ただし、UIDeviceOrientationは常にUIInterfaceOrientationではないことに注意してください。たとえば、デバイスがプレーンテーブルにある場合、予期しない値を受け取る可能性があります。

112
beryllium

[[UIApplication sharedApplication] statusBarOrientation]-常に、縦、左、横、右、上下の4つの値のいずれかに等しくなります。

[[UIDevice currentDevice] orientation]-これは標準の4つの値に相当し、不明、表向き、または裏向きです。

[[UIApplication sharedApplication] statusBarOrientation]-インターフェースの向きを取得するより好ましい方法です。

25
holodnyalex

すべてのView Controllerにこの機能があります

   override func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation) {
          //fromInterfaceOrientation.isLandscape
   }

または、ステータスバーの向きを使用できます

   if UIApplication.sharedApplication().statusBarOrientation == UIInterfaceOrientation.Portrait {
        //
   }

IOS 9で動作します:)

1
Eduardo Irias