美文网首页
iOS 单个界面旋转屏幕

iOS 单个界面旋转屏幕

作者: mapg | 来源:发表于2020-03-11 17:04 被阅读0次

1 创建UIDevice的category

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface UIDevice (Orientation)

/**
 * @interfaceOrientation 输入要强制转屏的方向
 */
+ (void)switchNewOrientation:(UIInterfaceOrientation)interfaceOrientation;

@end

NS_ASSUME_NONNULL_END

@implementation UIDevice (Orientation)

+ (void)switchNewOrientation:(UIInterfaceOrientation)interfaceOrientation{
        
        NSNumber *resetOrientationTarget = [NSNumber numberWithInt:UIInterfaceOrientationUnknown];
        
        [[UIDevice currentDevice] setValue:resetOrientationTarget forKey:@"orientation"];
        
        //NSNumber *orientationTarget = [NSNumber numberWithInt:interfaceOrientation];
        
        [[UIDevice currentDevice] setValue:@(interfaceOrientation) forKey:@"orientation"];
    
}

@end

2 AppDelegate里面设置屏幕旋转权限

#pragma mark:旋转屏幕
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window{
    if (self.allowRotation == YES) {
        //横屏
        return UIInterfaceOrientationMaskLandscape;      
    }else{
        //竖屏
        return UIInterfaceOrientationMaskPortrait;
    }
}

3 目标界面ViewDidLoad方法里面添加:

        appDelegate.allowRotation = YES;
        //调用横屏代码
        [UIDevice switchNewOrientation:UIInterfaceOrientationLandscapeRight];

3.1 在出现界面和消失界面的方法里面设置禁用手势返回代码

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
        //禁用侧滑手势方法  
     self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    //开启侧滑手势方法
 self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}

3.2 退出界面的时候

        appDelegate.allowRotation = NO;//关闭横屏仅允许竖屏
        //切换到竖屏
        [UIDevice switchNewOrientation:UIInterfaceOrientationPortrait];
         //present进来的
        [self.navigationController popViewControllerAnimated:YES];
        //push进来的
        [self dismissViewControllerAnimated:true completion:^{
        //
    }]  

相关文章

网友评论

      本文标题:iOS 单个界面旋转屏幕

      本文链接:https://www.haomeiwen.com/subject/bzqhjhtx.html