Support different orientation for only one view iOS 6

后端 未结 7 1043
时光说笑
时光说笑 2020-11-29 03:57

I want to rotate ONLY one of my views within my app to either landscape left or landscape right. All my other views are in portrait mode and I have set my app to support onl

7条回答
  •  失恋的感觉
    2020-11-29 04:29

    I have been searching for the solution for hours!

    So after implementing the needed methods everywhere. shouldAutorotate doesn't need to be set to YES because it is already set as default:

    - (NSUInteger)supportedInterfaceOrientations{
        return UIInterfaceOrientationMaskPortrait;
    }
    
    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
         return UIInterfaceOrientationPortrait;
    }
    

    When it is time to show the UIViewController which needs the orientation different than the other views, I created a UIStoryboardSegue with this implementation inside:

    #import "Showing.h"
    
    @implementation Showing
    
    - (void)perform{
        NSLog(@"Showing");
        UIViewController *sourceVC = self.sourceViewController;
        UIViewController *presentingVC = self.destinationViewController;
    
        [sourceVC.navigationController presentViewController:presentingVC 
                                                    animated:YES 
                                                  completion:nil];
    }
    
    @end
    

    Inside the UIStoryboard I connected the views with this segue (showing):

    enter image description here

    It is just important, you are using

    presentViewController:animated:completion:
    

    AND NOT

    pushViewController:animated:
    

    otherwise the orientation won't be determined again.


    I had been trying things like

    [UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];
    

    OR this one inside the UIViewController where the orientation should change, and I also tryied to call it inside my custom UIStoryboardSegues before presentingViewController and dismissViewController:

    [UIViewController attemptRotationToDeviceOrientation];
    

    OR

    NSNumber *numPortrait = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
    [[UIDevice currentDevice] setValue:numPortrait forKey:@"orientation"];
    

    But no one of them worked. Of course the last example shouldn't be an option, because if apple will change anything of their api this could cause problems inside your app.

    I also tried to use the AppDelegate method and always determine the orientation inside this method after looking for the correct UIInterfaceOrientation of the actual visibleViewController but then it sometimes happened to crash when switching from one to another orientation. So I'm still wondering why its made so complicated and there seems also not to be any documentation where it is explained correctly. Even following this part didn't help me.

提交回复
热议问题