iOS强制横竖屏转换

https://www.jianshu.com/p/d6cb54d2eaa1  这篇文章给出的方案是可行的。

 

经测试,想要第一个界面强制横屏,第二个界面强制竖屏, dismiss掉之后回到第一个界面依然强制横屏。用户的手机设备禁止旋转按钮不打开状态下,旋转手机屏幕能依然强制横屏或者竖屏。

第一个界面强制横屏 在工程设置里

技术分享图片

如果是要第一个界面强制竖屏 那么设置为

技术分享图片

 

AppDelegate里的系统方法为:

AppDelegate.h里公开一个字段来确定是横屏还是竖屏   

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ba2da2; background-color: #ffffff }
span.s1 { color: #000000 }

@property(nonatomic,assign)BOOL allowRotation;

 

 

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b; background-color: #ffffff }

AppDelegate.m文件中添加代码

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; background-color: #ffffff; min-height: 14.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff; min-height: 13.0px }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3e1e81; background-color: #ffffff }
span.s1 { color: #703daa }
span.s2 { color: #ba2da2 }
span.s3 { color: #4f8187 }
span.s4 { color: #008400 }
span.s5 { color: #000000 }

– (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window

 

{

    

    if (self.allowRotation == YES) {

        //横屏

        return UIInterfaceOrientationMaskLandscape;

        

    }else{

        //竖屏

        return UIInterfaceOrientationMaskPortrait;

        

    }

    

}

 

在第一个界面的控制器里添加代码

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b; background-color: #ffffff }
span.s1 { color: #78492a }

#import “AppDelegate.h”

#import “UIDevice+TFDevice.h”

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3e1e81; background-color: #ffffff }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff; min-height: 13.0px }
span.s1 { color: #ba2da2 }
span.s2 { color: #3e1e81 }
span.s3 { color: #d12f1b }
span.s4 { color: #4f8187 }
span.s5 { color: #703daa }
span.s6 { color: #000000 }
span.s7 { color: #31595d }

-(void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];

     NSLog(@”%s”,__func__);

    AppDelegate * appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

    //允许转成横屏

    

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff }
span.s1 { color: #4f8187 }
span.s2 { color: #ba2da2 }

    appDelegate.allowRotation = YES;

    //调用横屏代码

    

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3e1e81; background-color: #ffffff }
span.s1 { color: #000000 }
span.s2 { color: #703daa }
span.s3 { color: #31595d }

[UIDevice switchNewOrientation:UIInterfaceOrientationLandscapeLeft];

    

}

 

在第二个界面的控制器里

添加代码

 

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b; background-color: #ffffff }
span.s1 { color: #78492a }

#import “AppDelegate.h”

#import “UIDevice+TFDevice.h”

 

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3e1e81; background-color: #ffffff }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ba2da2; background-color: #ffffff }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff; min-height: 13.0px }
span.s1 { color: #ba2da2 }
span.s2 { color: #000000 }
span.s3 { color: #3e1e81 }
span.s4 { color: #d12f1b }
span.s5 { color: #4f8187 }
span.s6 { color: #703daa }
span.s7 { color: #31595d }

– (void)viewDidLoad {

    [super viewDidLoad];

    NSLog(@”%s”,__func__);

    AppDelegate * appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

    //允许转成竖屏

   

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff }
span.s1 { color: #4f8187 }
span.s2 { color: #ba2da2 }

    appDelegate.allowRotation = NO;

    //调用竖屏代码

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3e1e81; background-color: #ffffff }
span.s1 { color: #000000 }
span.s2 { color: #703daa }
span.s3 { color: #31595d }

 [UIDevice switchNewOrientation:UIInterfaceOrientationPortrait];

  

}

 

另外对UIDevice设备做一个分类扩展

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ba2da2; background-color: #ffffff }
span.s1 { color: #ba2da2 }
span.s2 { color: #703daa }

@interface UIDevice (TFDevice)

/**

 * @interfaceOrientation 输入要强制转屏的方向

 */

+ (void)switchNewOrientation:(UIInterfaceOrientation)interfaceOrientation;

@end

 

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b; background-color: #ffffff }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; background-color: #ffffff; min-height: 14.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff; min-height: 13.0px }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3e1e81; background-color: #ffffff }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ba2da2; background-color: #ffffff }
span.s1 { color: #78492a }
span.s2 { color: #ba2da2 }
span.s3 { color: #703daa }
span.s4 { color: #000000 }
span.s5 { color: #3e1e81 }
span.s6 { color: #d12f1b }

#import “UIDevice+TFDevice.h”

 

@implementation UIDevice (TFDevice)

+ (void)switchNewOrientation:(UIInterfaceOrientation)interfaceOrientation

{

    

    NSNumber *resetOrientationTarget = [NSNumber numberWithInt:UIInterfaceOrientationUnknown];

    

    [[UIDevice currentDevice] setValue:resetOrientationTarget forKey:@”orientation”];

    

    NSNumber *orientationTarget = [NSNumber numberWithInt:interfaceOrientation];

    

    [[UIDevice currentDevice] setValue:orientationTarget forKey:@”orientation”];

    

}

 

@end

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff }
span.s1 { color: #4f8187 }
span.s2 { color: #ba2da2 }