views:

65

answers:

2

How to get the current orientation of iPhone? I surfed this site, and found two methods as followings.

  • [UIApplication sharedApplication].statusBarOrientation;
  • [[UIDevice currentDevice] orientation];

Which one is the right way to get the current orientation ? I tried two methods under simulator 4.1, but there are some problems for both methods.

+2  A: 

[[UIDevice currentDevice] orientation] gets the current physical orientation of the device. [UIApplication sharedApplication].statusBarOrientation gets the orientation of the UI. If the app ever returns NO to the shouldAutorotateToInterfaceOrientation: method, the two values will not be the same.

grahamparks
Thank you for showing me a clear picture about those two methods.
Toro
+3  A: 

Register your class to listen to UIDeviceOrientationDidChangeNotification then handle the device orientation accordingly.

[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(deviceRotated:)
name:UIDeviceOrientationDidChangeNotification
object:[UIDevice currentDevice]];

and handle the device's orientation properly:

- (void)deviceRotated: (id) sender{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    if (orientation == UIDeviceOrientationFaceUp ||
        orientation == UIDeviceOrientationFaceDown)
    {
        //Device rotated up/down
    }

    if (orientation == UIDeviceOrientationPortraitUpsideDown)
    {
    }
    else if (orientation == UIDeviceOrientationLandscapeLeft)
    {
    }
    else if (orientation == UIDeviceOrientationLandscapeRight)
    {
    }
}
sfa
Thank you for help. I vote up because one answer for one question. The way works well, and thank you.
Toro