iOS 实现单个页面支持横竖屏,其余页面只能竖屏

最近在本身的项目里面  有须要作一个需求 : app中某一个页面支持横竖屏, 而其余页面只能竖屏。
  • 1
  • 2

实现方法以下: 
1 首先须要Xcode中选中支持的屏幕方向 
这里写图片描述app

2 Appdelegate中 
.h测试

@property (nonatomic,assign)NSInteger allowRotate; 
  • 1

.m中ui

//此方法会在设备横竖屏变化的时候调用 - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { // NSLog(@"方向 ============= %ld", _allowRotate); if (_allowRotate == 1) { return UIInterfaceOrientationMaskAll; }else{ return (UIInterfaceOrientationMaskPortrait); } } // 返回是否支持设备自动旋转 - (BOOL)shouldAutorotate { if (_allowRotate == 1) { return YES; } return NO; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3 在须要支持横竖屏的controller中:atom

viewWillApplear 中lua

//在视图出现的时候,将allowRotate改成1, AppDelegate * delegate = (AppDelegate *)[UIApplication sharedApplication].delegate; delegate.allowRotate = 1;
  • 1
  • 2
  • 3

viewWillDisappear中spa

//在视图出现的时候,将allowRotate改成0, AppDelegate * delegate = (AppDelegate *)[UIApplication sharedApplication].delegate; delegate.allowRotate = 0;
  • 1
  • 2
  • 3

写好以上代码以后, 会发现一些问题: 当横屏页面直接点击“返回”按钮退出的时候, 页面依然是横屏, 而咱们须要的是仅一个页面能够横屏,测试须要在viewWillDisappear中加入以下代码:code

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 = UIInterfaceOrientationPortrait; [invocation setArgument:&val atIndex:2]; [invocation invoke]; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

此时就能够使app仅有设置页面支持横竖屏了!图片

此时若是app要求用户在横屏 竖屏的模式下改变UI(横屏与竖屏对应不一样的UI), 能够在如下方法中执行get

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { // do something before rotation if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { 屏幕从竖屏变为横屏时执行 }else{ 屏幕从横屏变为竖屏时执行 } } - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { // do something after rotation }
相关文章
相关标签/搜索