Search code examples
objective-cuiinterfaceorientation

Why UIInterfaceOrientation always returns to the right?


Why UIInterfaceOrientation always returns to the right?
When I finish rotate, always ends on the right, why?
PS: I just want to landscape

Here is the code

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    switch (interfaceOrientation)
    {
       case UIInterfaceOrientationLandscapeLeft:
          NSLog(@"Is Left");
       case UIInterfaceOrientationLandscapeRight:
          NSLog(@"Is Right");
       default: ;
    }

    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    switch (fromInterfaceOrientation)
    {
        case UIInterfaceOrientationLandscapeLeft:
          NSLog(@"From Left");
        case UIInterfaceOrientationLandscapeRight:
          NSLog(@"From Right");
        default: ;
    }
}

Here is the LOG

2012-08-23 17:45:28.074 Simulador 360[323:707] Is Right
2012-08-23 17:45:28.126 Simulador 360[323:707] Is Right
2012-08-23 17:45:28.131 Simulador 360[323:707] Is Left
2012-08-23 17:45:28.132 Simulador 360[323:707] Is Right
2012-08-23 17:45:28.138 Simulador 360[323:707] Is Left
2012-08-23 17:45:28.140 Simulador 360[323:707] Is Right
2012-08-23 17:45:31.160 Simulador 360[323:707] Is Right
2012-08-23 17:45:31.167 Simulador 360[323:707] Is Right
2012-08-23 17:45:31.977 Simulador 360[323:707] From Left
2012-08-23 17:45:31.980 Simulador 360[323:707] From Right
2012-08-23 17:45:35.684 Simulador 360[323:707] Is Left
2012-08-23 17:45:35.687 Simulador 360[323:707] Is Right
2012-08-23 17:45:35.691 Simulador 360[323:707] Is Left
2012-08-23 17:45:35.693 Simulador 360[323:707] Is Right
2012-08-23 17:45:36.502 Simulador 360[323:707] From Right

Solution

  • You are missing breaks in your switch statements. Without calling break, execution will continue through to the next case, so if your case if the interface orientation evaluates to Left, both Left and Right case blocks will be executed.

    Fix this by inserting break at the end of each of your cases:

    switch (interfaceOrientation)
    {
       case UIInterfaceOrientationLandscapeLeft:
          NSLog(@"Is Left");
          break;
       case UIInterfaceOrientationLandscapeRight:
          NSLog(@"Is Right");
          break;
       default: ;
    }