iosuiviewcontrolleruideviceorientation

when iphone Device orientation is face up/down, can I tell if it´s landscape or portrait?


I got this code that if the device is in landscape left/right or upside down it rotates and shows another view controller. but if it´s in the orientation face up or face down, then how can I tell if it´s in landscape mode or portrait? cause I only want to rotate if it´s face up or down and in landscape mode

    - (void)viewDidAppear:(BOOL)animated
    {
        UIDeviceOrientation orientation = [[UIDevice currentDevice]orientation];
        NSLog(@"orientation %d", orientation);
        if ((orientation == 2) || (orientation == 3) || (orientation == 4))
        {

            [self performSegueWithIdentifier:@"DisplayLandscapeView" sender:self];
            isShowingLandscapeView = YES;
    }
}

Solution

  • In UI code you usually should not depend on the device orientation but the user interface orientation. There's often a difference between them, for example when a view controller only supports portrait.

    The most important difference for your case is that the interface orientation is never face up/down.

    In your case you can just ask the view controller for the current user interface orientation: self.interfaceOrientation.

    Your condition could be expressed somewhat like if (deviceOrientation is face up/down and interfaceOrientation is landscape)

    Bear in mind that a device orientation landscape left means a user interface orientation landscape right.