Force orientation to Portrait Mode

2019-02-28 08:24发布

I have all the app in portrait mode, but I have one of the viewcontroller in landscape mode to be a gallery of images.

On the tab Project Summary enable LandscapeLeft mode, so I have to disable the rotation this way in the rest of the Viewcontroller, except in the VC of the image gallery.

I want to keep the rotation in Portrait mode, to do this and to block all the VC portrait, I used the following code

-(BOOL)shouldAutorotate{
return YES;
}

-(NSInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
}
return UIInterfaceOrientationPortrait;
}

This, keep me the landscape mode in the previous VC , when it should be rotated to Portrait.

Any idea do?

1条回答
爷的心禁止访问
2楼-- · 2019-02-28 09:01

For Portrait Mode VC,

#pragma mark iOS 5 Orientation Support

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

     return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}

#pragma mark iOS 6 Orientation Support

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

For Landscape mode VC,

#pragma mark - iOS 5.0 and up Rotation Methods

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    return UIInterfaceOrientationMaskLandscape;

}

#pragma mark - iOS 6.0 and up Rotation Methods

- (NSUInteger)supportedInterfaceOrientations;
{
    return UIInterfaceOrientationMaskLandscape;
}

If you are using navigationController,

Create a category like this,

    @interface UINavigationController (Rotation_IOS6)

    @end

    @implementation UINavigationController (Rotation_IOS6)

    -(BOOL)shouldAutorotate
    {
        if([self.visibleViewController isMemberOfClass:NSClassFromString(@"YourLandscapeViewController")])
        {
            return UIInterfaceOrientationMaskLandscape
        }
        return NO;
    }

    - (NSUInteger)supportedInterfaceOrientations
    {
        return [[self topViewController] supportedInterfaceOrientations];
    }

    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
    {
        if([self.visibleViewController isMemberOfClass:NSClassFromString(@"YourLandscapeViewController")])
        {
            return UIInterfaceOrientationMaskLandscape
        }
        return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
    }

@end
查看更多
登录 后发表回答