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

1,项目中开启横竖屏   

iOS 一个页面支持一个方向上横屏,其他页面全部竖屏_第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];
    }
}






你可能感兴趣的:(ios,UIKit,&,UI控件,IOS面试,ios项目)