web-dev-qa-db-ja.com

UIDeviceの向き

メソッドに次のコードがあります。シミュレーターでこれを実行すると、デバッガーはコードをスキップしますか?何が足りないのですか?

if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || 
        ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) 
{       

} else {

}
12
Jordan

アップデート2

これは問題ではありませんが、向きの通知をオンにしてみてください。

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];


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

更新

私の悪い、私はそれが空だと思った。

Orステートメントを削除して、単一の方向をテストしてみてください。それで問題が解決するかどうかを確認してください。多分ブラケットの問題か何かばかげている。

私は本番コードで次のテストを行っているので、あなたのテクニックはうまくいくはずです:

    if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || 
        ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) {


}

元の回答

ステップインするには、実際にifブロックにステートメントを配置する必要があります。

デバッガーは、空のブロックをスキップするのに十分スマートです。

18
Corey Floyd

インターフェイスの向きを判断する最良の方法は、ステータスバーの向きを確認することです。

 UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

    if(orientation == UIInterfaceOrientationPortrait || 
       orientation == UIInterfaceOrientationPortraitUpsideDown) {

       //Portrait orientation

}

if(orientation == UIInterfaceOrientationLandscapeRight ||
   orientation == UIInterfaceOrientationLandscapeLeft) {

    //Landscape orientation

}

UIDeviceクラスは、加速度計に基づいて向きを測定します。デバイスが平らになっていると、正しい向きを返しません。

54
srgtuszy

マクロUIDeviceOrientationIsLandscapeUIDeviceOrientationIsPortraitがあるので、LandscapeLeftとLandscapeRightと別々に比較する代わりに、次のようにすることができます。

if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
{
}
23
inkredibl

オリエンテーション通知をオンにせずにこれを行う別の方法は、

ステップ1:現在の方向をローカル変数myCurrentOrientationに保存し、次のように割り当てます。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
                                duration:(NSTimeInterval)duration
{
    myCurrentOrientation = toInterfaceOrientation;
}

ステップ2:チェックにmyCurrentOrientationを使用します

if (UIInterfaceOrientationIsLandscape(myCurrentOrientation) == YES) {
    // landscape
}
else {
    // portrait.
}
2
S B

いくつかの行のコードを安全にするために、あなたの代わりに私の強調表示されたコードを使用することをお勧めします。

-(void) viewDidLoad
{
    [super viewDidLoad];
    [self rotations];
}

-(void)rotations
{
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(orientationChanged:)
                                         name:UIDeviceOrientationDidChangeNotification
                                         object:nil];
}

-(void) orientationChanged:(NSNotification *)notification
{
    //USE THIS PART
    //USE THIS PART
    //USE THIS PART
    //USE THIS PART
    //USE THIS PART
    if (UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation))
    {
    }
}

の代わりに

if([[UIDevice currentDevice] orientation] == UIInterfaceOrientationPortrait || 
   [[UIDevice currentDevice] orientation] == UIInterfaceOrientationPortraitUpsideDown) 
{
}
0
Jiří Zahálka

画面の向きと真の中心を見つける方法は次のとおりです。 UIActivityIndi​​catorViewを適切に設定できるように、Tuszyのメソッドを使用しました。

- (BOOL) isPortraitOrientation {
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
    if(orientation == UIInterfaceOrientationPortrait ||
       orientation == UIInterfaceOrientationPortraitUpsideDown) {
        return true;
    }
    if(orientation == UIInterfaceOrientationLandscapeRight ||
       orientation == UIInterfaceOrientationLandscapeLeft) {
        return false;
    }
    return false;
}

そして、中心を得る方法...

- (void) findMyUIViewCenter {
    CGPoint myCenter;
    if ([self isPortraitOrientation]) {
        myCenter = self.view.center;
    }
    else {
        myCenter = CGPointMake(self.view.frame.size.height / 2.0, self.view.frame.size.width / 2.0);
    }
    NSLog(@"true center -- x:%f y:%f )",myCenter.x,myCenter.y);
}
0
MGM

値を取得する前に、[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]を呼び出す必要があります。このメソッドのドキュメントをご覧ください。これを追跡するのにしばらく時間がかかりました。

0
Filip

Springboard Tweak内にいて、現在のアプリの向きに応じて何かを表示したい場合は、これを使用できます(脱獄のみ)。

UIInterfaceOrientation o = [[UIApplication sharedApplication] _frontMostAppOrientation];
0
malhal