https://www.cnblogs.com/qqcc1388/p/7358552.html
iOS要實現橫豎屏切換很簡單,不需要使用任何第三方,只需要實現幾個方法就可以了。demo下載地址:https://github.com/qqcc1388/TYOrientationDemo
1.設置系統支持橫豎屏【General】->【Targets】-> 【Deployment info】->【Device Orientation】
2.在控制器中實現對應的方法(默認支持豎屏)
-(BOOL)shouldAutorotate{ return YES; } -(UIInterfaceOrientationMask)supportedInterfaceOrientations{ return UIInterfaceOrientationMaskPortrait; }
3.某些特定的頁面需要橫屏支持的,則單獨處理(同樣需要實現2個方法)
-(BOOL)shouldAutorotate{ return YES; } - (UIInterfaceOrientationMask)supportedInterfaceOrientations { return (UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskLandscapeRight); }
4.如果控制器中有用到導航控制器或者tabbarController,這需要在導航控制器和tabbarController分別實現以下2個方法
- (BOOL)shouldAutorotate{ return [self.selectedViewController shouldAutorotate]; } - (UIInterfaceOrientationMask)supportedInterfaceOrientations{ return [self.selectedViewController supportedInterfaceOrientations]; }
5.如果需要實現點擊按鈕切換橫豎屏的效果則可以參考如下方案:
//按鈕點擊事件 - (void)leftAction { [self interfaceOrientation:UIInterfaceOrientationPortrait]; } - (void)rightAction { [self interfaceOrientation:UIInterfaceOrientationLandscapeRight]; } - (void)interfaceOrientation:(UIInterfaceOrientation)orientation { 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 = orientation; // 從2開始是因為0 1 兩個參數已經被selector和target占用 [invocation setArgument:&val atIndex:2]; [invocation invoke]; } }
6.如果要監聽屏幕旋轉事件則可以參考如下方案(監聽旋轉事件,控制鍵盤,控制frame等操作)
UIDevice *device = [UIDevice currentDevice]; //Get the device object [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:device]; -(void)orientationChanged:(NSNotification *)noti{ UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; switch (orientation) { case UIDeviceOrientationPortrait: // Device oriented break; case UIDeviceOrientationPortraitUpsideDown: // Device oriented break; case UIDeviceOrientationLandscapeLeft : // Device oriented break; case UIDeviceOrientationLandscapeRight: // Device oriented horizontally, home button on the left break; default: break; } }