12

我在方法中有以下代码。当我在模拟器中运行它时,调试器会直接跳过代码??我错过了什么?

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

} else {

}
4

8 回答 8

54

确定界面方向的最佳方法是查看状态栏方向:

 UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

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

       //Portrait orientation

}

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

    //Landscape orientation

}

UIDevice类基于加速度计测量方向,如果设备平放,它将不会返回正确的方向。

于 2011-06-14T13:23:06.413 回答
23

请注意,有一个宏UIDeviceOrientationIsLandscapeand UIDeviceOrientationIsPortrait,因此与其将其分别与 LandscapeLeft 和 LandscapeRight 进行比较,不如这样做:

if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
{
}
于 2009-12-01T06:49:55.437 回答
18

更新 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 块中才能使其介入。

调试器足够聪明,可以跳过空块。

于 2009-05-30T18:56:29.380 回答
2

在不打开方向通知的情况下执行此操作的另一种方法是

第 1 步:将当前方向保存在局部变量中myCurrentOrientation,并像这样分配它:

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

第 2 步:用于myCurrentOrientation您的支票

if (UIInterfaceOrientationIsLandscape(myCurrentOrientation) == YES) {
    // landscape
}
else {
    // portrait.
}
于 2011-09-22T03:25:17.280 回答
0

嘿,您需要[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications] 在获取值之前调用。查看此方法的文档。我花了一段时间才找到这个。

于 2011-07-05T13:35:06.193 回答
0

假设您在 Springboard 调整中并希望根据当前应用程序的方向显示某些内容,那么您可以使用它(仅限越狱):

UIInterfaceOrientation o = [[UIApplication sharedApplication] _frontMostAppOrientation];
于 2012-02-03T08:20:07.293 回答
0

我建议您使用我突出显示的代码而不是您的代码来保护某些行代码。

-(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) 
{
}
于 2013-08-29T11:23:45.923 回答
0

这是一种查找屏幕方向和真实中心的方法。我使用了 Tuszy 的方法,所以我可以正确设置 UIActivityIndi​​catorView。

- (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);
}
于 2014-05-22T10:39:00.263 回答