在APPdelegate.h 中
@property (assign , nonatomic) NSInteger isForcePortrait;
APPdelegate.m 中
self.isForcePortrait == 1 《只支持横屏》
self.isForcePortrait == 2 《支持左右横屏和竖屏》
self.isForcePortrait == 3 《只支持一个方向的横屏》
-(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
if (self.isForcePortrait == 1){
return UIInterfaceOrientationMaskPortrait;
}else if(self.isForcePortrait == 2){
return UIInterfaceOrientationMaskLandscapeRight|UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskPortrait;
}else if (self.isForcePortrait == 3){
return UIInterfaceOrientationMaskLandscapeRight;
}else{
return UIInterfaceOrientationMaskPortrait;
}
}
情况1:只支持横屏的controller. 所有只支持竖屏的controller继承于基类baseviewcontroller,,
BaseViewController.m中
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
AppDelegate *appdelegate=(AppDelegate *)[UIApplication sharedApplication].delegate;
appdelegate.isForcePortrait=1;
[appdelegate application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:self.view.window];
}
情况2:支持竖屏,左右横屏,,.支持竖屏,左右横屏的controller.m中
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
AppDelegate *appdelegate=(AppDelegate *)[UIApplication sharedApplication].delegate;
appdelegate.isForcePortrait=2;
[appdelegate application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:self.view.window];
}
情况3:只支持横屏controller 进来就横屏且只能横屏在controller.m中
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
AppDelegate *appdelegate=(AppDelegate *)[UIApplication sharedApplication].delegate;
appdelegate.isForcePortrait=3;
[appdelegate application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:self.view.window];
//// 屏幕开始发生旋转
[self orientationToPortrait:UIInterfaceOrientationLandscapeRight];
}
/// 屏幕发生旋转的方法==============
- (void)orientationToPortrait:(UIInterfaceOrientation)orientation {
SEL selector = NSSelectorFromString(@"setOrientation:");
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevice currentDevice]];
int val = orientation;
[invocation setArgument:&val atIndex:2];//前两个参数已被target和selector占用
[invocation invoke];
}
记得页面消失的时候 把屏幕旋转为竖屏 返回方法或屏幕消失方法中
AppDelegate *appdelegate=(AppDelegate *)[UIApplication sharedApplication].delegate;
appdelegate.isForcePortrait=1;
[appdelegate application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:self.view.window];
[weakself orientationToPortrait:UIInterfaceOrientationPortrait];