web-dev-qa-db-ja.com

iPhoneの現在の向きを取得する方法は?

IPhoneの向きを取得する特別な方法はありますか?度やラジアンでは必要ありません。UIInterfaceOrientationオブジェクトを返すようにします。 if-else構造のように必要なだけです

if(currentOrientation==UIInterfaceOrientationPortrait ||currentOrientation==UIInterfaceOrientationPortraitUpsideDown) {
//Code
}  
if (currentOrientation==UIInterfaceOrientationLandscapeRight ||currentOrientation==UIInterfaceOrientationLandscapeLeft ) {
//Code
}

前もって感謝します!

43
Knodel

これはおそらくあなたが望むものです:

UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation];

その後、次のようなシステムマクロを使用できます。

if (UIInterfaceOrientationIsPortrait(interfaceOrientation))
{

}

デバイスの向きを使用する場合:

UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];

これには、UIDeviceOrientationFaceUpUIDeviceOrientationFaceDownなどの列挙が含まれます

114
Satyajit

他の回答で説明したように、deviceOrientationではなくinterfaceOrientationが必要です。

これに到達する最も簡単な方法は、UIViewControllerでプロパティinterfaceOrientationを使用することです。 (だからほとんどの場合、ちょうど:self.interfaceOrientationが行います)。

可能な値は次のとおりです。

UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft

要確認:デバイスを右に回すと左向きになります。

11
Bjinse

これは、方向が変更されたときにルートビューに戻ってくる奇妙な問題を取得していたために、私が記述しなければならなかったコードのスニペットです。 ...これは素晴らしいエラーなしで動作します

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationLandscapeLeft){
        //do something or rather
        [self 
shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft];
        NSLog(@"landscape left");
    }
    if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationLandscapeRight){
        //do something or rather
        [self 
shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight];
        NSLog(@"landscape right");
    }
    if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationPortrait){
        //do something or rather
        [self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortrait];
        NSLog(@"portrait");
    }
}
4
FreeAppl3

UIInterfaceOrientationは非推奨になり、UIDeviceOrientationにはUIDeviceOrientationFaceUpUIDeviceOrientationFaceDownが含まれるため、インターフェイスの向きを示すことはできません。

解決策は非常に簡単ですが

if (CGRectGetWidth(self.view.bounds) > CGRectGetHeight(self.view.bounds)) {
    // Landscape
} else {
    // Portrait
}
1
trapper