iOS 一个页面支持一个方向上横屏,其他页面全部竖屏

来源:互联网 发布:unity3d 重新加载场景 编辑:程序博客网 时间:2024/05/01 13:08

1,项目中开启横竖屏   






2,自定义一个 UINavigationController ,并实现以上几个方法

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{    UIViewController *vc =  self.topViewController;    if([vc isKindOfClass:[RemoteController class]]){//要横屏的界面        return (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight);    }    return (toInterfaceOrientation == UIInterfaceOrientationPortrait);}- (BOOL)shouldAutorotate{    UIViewController *vc =  self.topViewController;    if([vc isKindOfClass:[RemoteController class]]){//要横屏的界面        return YES;    }    //横屏的上一个界面,要返回为YES,否则横屏返回的时候上一界面不能还原成竖屏    if([vc isKindOfClass:[ConnectHome class]]){        return YES;    }    return NO;}- (NSUInteger)supportedInterfaceOrientations{    UIViewController *vc =  self.topViewController;    if([vc isKindOfClass:[RemoteController class]]){//要横屏的界面        return UIInterfaceOrientationMaskLandscapeRight;    }    return UIInterfaceOrientationMaskPortrait;}

3,在需要横屏的界面

//进入界面时强制横屏- (void)viewWillAppear:(BOOL)animated{    if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {        SEL selector = NSSelectorFromString(@"setOrientation:");        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];        [invocation setSelector:selector];        [invocation setTarget:[UIDevice currentDevice]];        int val = UIInterfaceOrientationLandscapeRight;        [invocation setArgument:&val atIndex:2];        [invocation invoke];    }}//退出界面时强制竖屏- (void)viewWillDisappear:(BOOL)animated{        if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {        SEL selector = NSSelectorFromString(@"setOrientation:");        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];        [invocation setSelector:selector];        [invocation setTarget:[UIDevice currentDevice]];        int val = UIDeviceOrientationPortrait;        [invocation setArgument:&val atIndex:2];        [invocation invoke];    }}






0 0
原创粉丝点击