屏幕旋转~随笔

1、方向旋转三种枚举

  • UIDeviceOrientation 设备当前的旋转方向

  • UIInterfaceOrientation 界面当前的旋转方向(控制器)

  • UIInterfaceOrientationMask 界面当前支持的旋转方向

2、方向控制优先级

Appdelegate代码控制 > XcodeGeneral设置(info.plist设置) > 控制器的代码控制

xcode设置

image-20220715094806599.png

App delegate

image-20220715094941652.png

界面控制

image-20220715095258510.png

3、界面控制注意事项

image-20220715095416075.png
image-20220715095516937.png

4、单个界面强制旋转

//进入界面:设置横屏

[self setDeviceInterfaceOrientation:UIDeviceOrientationLandscapeLeft];

//方法1和方法2只有在shouldAutorotate返回YES的时候生效

//如果有导航控制器和Tabbar控制器,则要注意控制优先级

//方法1:强制屏幕旋转

  • (void)setInterfaceOrientation:(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;

[invocation setArgument:&val atIndex:2];

[invocation invoke];

}

}

//方法2:强制屏幕旋转

  • (void)setDeviceInterfaceOrientation:(UIDeviceOrientation)orientation {

if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {

[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:orientation] forKey:@"orientation"];

}

}

5、更新状态栏方向

  • 更新状态栏方向

[self setNeedsStatusBarAppearanceUpdate];

  • 更新控制器方向

[UIViewController attemptRotationToDeviceOrientation];

image-20220715113452369.png

6、实战开发2种策略

  • 控制权交给当前控制器
image-20220715110759448.png
image-20220715110829155.png
  • 控制权交给appDelegate控制(通过外部参数控制)
image-20220715111018796.png

参考文献

https://www.jianshu.com/p/a354ca1890de

https://www.jianshu.com/p/84a148e58fc8

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容