代码之家  ›  专栏  ›  技术社区  ›  Jordan

ui设备方向

  •  12
  • Jordan  · 技术社区  · 15 年前

    我在一个方法中有以下代码。当我在模拟器中运行这个时,调试程序跳过代码?我缺少什么?

    if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || 
            ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) 
    {       
    
    } else {
    
    }
    
    8 回复  |  直到 10 年前
        1
  •  18
  •   Corey Floyd    15 年前

    更新2

    这不重要,但请尝试打开方向通知:

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

    更新

    我的错,我以为是空的。

    尝试删除或语句,只测试一个方向。看看能不能修好。可能是支架问题或是什么傻事。

    我在生产代码中进行了以下测试,因此您的技术应该可以工作:

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

    原始答案

    实际上,您必须在if块中放入语句才能让它介入。

    调试器足够智能,可以跳过空块。

        2
  •  54
  •   brainray    10 年前

    确定接口方向的最佳方法是查看状态栏方向:

     UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
    
        if(orientation == UIInterfaceOrientationPortrait || 
           orientation == UIInterfaceOrientationPortraitUpsideDown) {
    
           //Portrait orientation
    
    }
    
    if(orientation == UIInterfaceOrientationLandscapeRight ||
       orientation == UIInterfaceOrientationLandscapeLeft) {
    
        //Landscape orientation
    
    }
    

    UIDevice 类根据加速度计测量方向,如果设备平放,则不会返回正确的方向。

        3
  •  23
  •   inkredibl    15 年前

    注意有一个宏 UIDeviceOrientationIsLandscape UIDeviceOrientationIsPortrait 因此,您可以这样做,而不是将其与景观左视图和景观右视图分别进行比较:

    if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
    {
    }
    
        4
  •  2
  •   S B    13 年前

    另一种不打开方向通知的方式是

    步骤1: 将当前方向保存在局部变量中 myCurrentOrientation 然后这样分配:

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

    步骤2: 使用 我的当前方向 为了你的支票

    if (UIInterfaceOrientationIsLandscape(myCurrentOrientation) == YES) {
        // landscape
    }
    else {
        // portrait.
    }
    
        5
  •  0
  •   malhal Benzy Neez    12 年前

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

    UIInterfaceOrientation o = [[UIApplication sharedApplication] _frontMostAppOrientation];
    
        6
  •  0
  •   EdChum Larry    12 年前

    你得打个电话 [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications] 在获取值之前。看看这个方法的文档。我花了一段时间才找到这个。

        7
  •  0
  •   Jiří Zahálka    11 年前

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

    -(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) 
    {
    }
    
        8
  •  0
  •   MGM    10 年前

    这里有一种方法可以找到屏幕的方向和真正的中心。我使用了Tuzzy的方法,以便正确设置uiActivityIndicatorView。

    - (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);
    }