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 }