web-dev-qa-db-ja.com

iOS 6でプログラムでデバイスの現在の向きを取得する方法は?

IOSアプリを開発し、iOS6デバイスでテストしました。テスト中、アプリが向きの変更に期待どおりに応答しないことに気付きました。

ここに私のコードがあります:

// Autorotation (iOS >= 6.0)
- (BOOL) shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationMaskPortrait;
}

正確には、iOSの向きの変更でどのメソッドが呼び出されるかを知りたいです。

20
Code Hunter

あなたはこれを試すことができます、あなたを助けるかもしれません:

iOS 6でプログラムでデバイスの向きを変更する方法

OR

目的-c:

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]

スイフト:

if UIDevice.current.orientation.isLandscape {
    // Landscape mode
} else {
    // Portrait mode
}
55
Shekhar Gupta

これを試して問題を解決できます。

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

以下のリンクを参照してくださいApp extensionデバイスの現在の向きを取得する(アプリ拡張機能)

36
Girish

たぶんばかげているかもしれませんが、それは動作しています(ViewControllerのみ):

if (self.view.frame.size.width > self.view.frame.size.height) {
    NSLog(@"Hello Landscape");
}
6
Lau
  @property (nonatomic) UIDeviceOrientation m_CurrentOrientation ;

/ * ViewDidloadまたはViewWillAppearでこれらのコードを宣言する必要があります* /

- (void)viewDidLoad

   {

   [super viewDidLoad];

   [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

   [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object: nil];
}

/ *現在、デバイスの向きを変更するたびにデバイスから通知が送信されるため、現在の向きを使用してコードまたはプログラムを制御できます* /

- (void)deviceOrientationDidChange:(NSNotification *)notification

 {

 //Obtaining the current device orientation

 /* Where self.m_CurrentOrientation is member variable in my class of type UIDeviceOrientation */

 self.m_CurrentOrientation = [[UIDevice currentDevice] orientation];

    // Do your Code using the current Orienation 

 }
5
Vicky

IDevice のドキュメントに従ってください。

電話する必要があります

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

その後、方向が変更されるたびに、UIDeviceOrientationDidChangeNotificationを受け取ります。

2
Boris Prohaska

このチュートリアル は、UIDeviceOrientationDidChangeNotificationを使用してデバイスの回転を処理する方法の簡単な概要を示します。 UIDeviceOrientationDidChangeNotificationを使用して、デバイスの向きが変更されたときに通知される方法を理解するのに役立ちます。

2
Steph Sharp
UIDevice.current.orientation.isLandscape

受け入れられた回答は、上記のようにデバイスの向きを読み取ります。これは、特にデバイスがほぼ水平の位置に保持されている場合、View Controllerの向きとは異なる方法で報告できます。

view controllerの向きを取得するには、そのinterfaceOrientationプロパティを使用できます。このプロパティは、iOS 8.0から廃止されましたが、引き続き正しく報告されます。

1
Matt Mc

ViewControllerでは、didRotateFromInterfaceOrientation:メソッドを使用して、デバイスが回転したことを検出し、あらゆる方向で必要なことを実行できます。

例:

#pragma mark - Rotation

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    switch (orientation) {
        case 1:
        case 2:
            NSLog(@"portrait");
            // your code for portrait...
            break;

        case 3:
        case 4:
            NSLog(@"landscape");
            // your code for landscape...
            break;
        default:
            NSLog(@"other");
            // your code for face down or face up...
            break;
    }
}
0
eduludi