本文讲述动态控制自动旋转方向(1到3),手动旋转屏幕方向(第4),以及通过旋转vc的view假旋转屏幕方向。

1.配置vc可以旋转

在需要配置方向的vc中 覆盖这个函数

- (BOOL)shouldAutorotate {return YES;
}

2.vc可以旋转的方向

在需要配置方向的vc中 覆盖这个函数,返回值可以动态改动,来实现手动控制屏幕旋转方向

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {return UIInterfaceOrientationMaskAll;
}

3.可能需要配置应用方向

在AppDelegate中覆盖这个函数,返回值可以动态改动,来实现手动控制屏幕旋转方向

- (UIInterfaceOrientationMask)  application:(UIApplication *)applicationsupportedInterfaceOrientationsForWindow:(UIWindow *)window {return UIInterfaceOrientationMaskAll;
}

当配置了以上所有步骤,其实屏幕就可以自动旋转方向了,可以旋转的方向就是他们返回的值。

3.手动旋转方向

 [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];UIInterfaceOrientationMask orientationMask = UIInterfaceOrientationMaskLandscapeRight;UIDeviceOrientation deviceOrientation = UIDeviceOrientationLandscapeRight;if (@available(iOS 16.0, *)) {[self setNeedsUpdateOfSupportedInterfaceOrientations];NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects];UIWindowScene *scene = [array firstObject];UIWindowSceneGeometryPreferencesIOS *geometryPreferencesIOS = [[UIWindowSceneGeometryPreferencesIOS alloc] initWithInterfaceOrientations:orientationMask];[scene requestGeometryUpdateWithPreferences:geometryPreferencesIOSerrorHandler:^(NSError *_Nonnull error) {NSLog(@"屏幕旋转 错误:%@", error);}];} else {[[UIDevice currentDevice] setValue:@(deviceOrientation) forKey:@"orientation"];[UIViewController attemptRotationToDeviceOrientation];}[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

需要注意的点是,当手动旋转的时候需要配合修改vc支持方向和应用返回方向的值,这样才能转过去。之所以不使用所有方向,是因为自动旋转会进行干扰,比如屏幕在物理当前是竖直状态,自动旋转就会旋转到竖直,手动旋转可能就会失败哟。

4.旋转VIew

  如果不想像上面那样麻烦控制,直接旋转View也是一个旋转屏幕的方法。但是这个方法有个问题是,设备方向没有真正旋转,所以状态栏方向可能是错的,下拉锁屏方向看起来也会有些异常。
- (BOOL)prefersStatusBarHidden {return _isRight;
}-(void)changeOrientationRight {//设备方向没有转动,所以状态栏方向是错的,要隐藏_isRight = YES;[self setNeedsStatusBarAppearanceUpdate];self.view.transform = CGAffineTransformMakeRotation(M_PI/2);CGSize size = UIScreen.mainScreen.bounds.size;self.view.bounds = CGRectMake(0, 0, size.height, size.width);
}

iOS 动态控制屏幕旋转相关推荐

  1. [iOS]监控屏幕旋转

    [iOS]监控屏幕旋转 - (void)viewDidLoad {[super viewDidLoad];//设备旋转通知[[UIDevice currentDevice] beginGenerati ...

  2. iOS开发屏幕旋转锁定横竖屏解决方法

    iOS开发屏幕旋转锁定横竖屏解决方法 使用场景: 公司最近产品,有两个界面是横屏的,其他的界面是竖屏的.针对这个需求,也调试了一段时间.在网上也查找了不少资料. 解决的方案也是有的,但是都是需要在导航 ...

  3. ios禁止屏幕旋转的几种方法

    一般的应用,只会支持竖屏正方向一个方向,支持多个屏幕方向的应用还是比较少的.  不过我在工作的项目中,跟这个屏幕方向接触比较多,因为我们是一个有界面的 SDK,要让接入方接入的,一开始做没什么经验,考 ...

  4. 关于iOS的屏幕旋转的问题

    新建工程后,旋转的设置大多是如图 此时,屏幕旋转都是按照此设置的方向旋转的,- (BOOL)shouldAutorotate 等没有响应 如要设置每页不同的旋转方向,需要打开如下设置 此时将根据 1. ...

  5. IOS:屏幕旋转与Transform

    iTouch,iPhone,iPad设置都是支持旋转的,如果我们的程序能够根据不同的方向做出不同的布局,体验会更好. 如何设置程序支持旋转呢,通常我们会在程序的info.plist中进行设置Suppo ...

  6. iOS中屏幕旋转问题解决

    https://blog.csdn.net/black_house/article/details/42460127 竖屏点击按钮 旋转到横屏 [[UIDevice currentDevice] se ...

  7. IOS 监控屏幕旋转

    在viewDidLoad中增加通知 - (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor blac ...

  8. iOS传感器:实现一个随屏幕旋转的图片

    作者 非典型技术宅 关注 2017.05.24 17:22* 字数 1568 阅读 351评论 7喜欢 14 在写上一个动画系列的时候学到了非常多的知识,也认识了很多人.例如受邀进入了某个神秘的动效组 ...

  9. IOS基础之iPad的屏幕旋转方向判断

    IOS基础之iPad的屏幕旋转方向判断 #pragma mark - 屏幕旋转 - (void)viewWillTransitionToSize:(CGSize)size withTransition ...

最新文章

  1. [linux内核][linux中断]——软中断机制
  2. RUBY,玩玩~~~
  3. 共识算法的比较:Casper vs Tendermint
  4. linux多线程九宫格,项目实战:Qt九宫格图片资源浏览器(支持window、linux、兼容各国产系统,支持子文件夹,多选,全选,图片预览,行数与列数设置等)...
  5. mysql默认字符集和排序_MySQL字符集和排序规则
  6. java 调用php文件上传_php上传文件,接口是java,go。
  7. 实例--[QSerialPort]串口通信
  8. 《第一本无人驾驶技术书》扫描版PDF分享
  9. Redis(八):进阶篇 - 事务
  10. 去除字符串中的特殊符号及表情
  11. 什么是透视?什么是一点透视?
  12. 中图分类法----O 数理科学和化学
  13. 计算机处理io和cpu,虚拟化技术原理(CPU、内存、IO)
  14. sgu482 Impudent Thief (动态规划)
  15. word 全部更新域
  16. 2021-10-28 集训第三天 神奇的Tom猫
  17. java反序列化浅探
  18. 会聊天、提醒、撩妹的Python微信机器人你肯定没见过
  19. 微信付费进群收费进群系统源码 底部会显示价格(可自定义)入群
  20. Python Pareto柏拉图分析

热门文章

  1. 跟我学做c#皮肤美化(二)
  2. php web应用开发娄不夜,《PHP Web应用开发》娄不夜、张军著【摘要 书评 在线阅读】-苏宁易购图书...
  3. 正则表达式——文本定位
  4. 苹果手机如何清除微信记录?专业操作助你从此操作告别“假删除”!
  5. VMvare百度网盘分享
  6. 米家扫地机器人沒有系统重置键_米家扫地机器人如何恢复出厂设置
  7. opencv-contrib3.4.1编译及配置步骤,opencv_ffmpeg.dll、ippicv等失败的解决方法
  8. AI 选择、移动、对齐
  9. 关于QT的网上售卖车APP
  10. 懂车帝app是哪个公司