iOS 动态控制屏幕旋转
本文讲述动态控制自动旋转方向(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 动态控制屏幕旋转相关推荐
- [iOS]监控屏幕旋转
[iOS]监控屏幕旋转 - (void)viewDidLoad {[super viewDidLoad];//设备旋转通知[[UIDevice currentDevice] beginGenerati ...
- iOS开发屏幕旋转锁定横竖屏解决方法
iOS开发屏幕旋转锁定横竖屏解决方法 使用场景: 公司最近产品,有两个界面是横屏的,其他的界面是竖屏的.针对这个需求,也调试了一段时间.在网上也查找了不少资料. 解决的方案也是有的,但是都是需要在导航 ...
- ios禁止屏幕旋转的几种方法
一般的应用,只会支持竖屏正方向一个方向,支持多个屏幕方向的应用还是比较少的. 不过我在工作的项目中,跟这个屏幕方向接触比较多,因为我们是一个有界面的 SDK,要让接入方接入的,一开始做没什么经验,考 ...
- 关于iOS的屏幕旋转的问题
新建工程后,旋转的设置大多是如图 此时,屏幕旋转都是按照此设置的方向旋转的,- (BOOL)shouldAutorotate 等没有响应 如要设置每页不同的旋转方向,需要打开如下设置 此时将根据 1. ...
- IOS:屏幕旋转与Transform
iTouch,iPhone,iPad设置都是支持旋转的,如果我们的程序能够根据不同的方向做出不同的布局,体验会更好. 如何设置程序支持旋转呢,通常我们会在程序的info.plist中进行设置Suppo ...
- iOS中屏幕旋转问题解决
https://blog.csdn.net/black_house/article/details/42460127 竖屏点击按钮 旋转到横屏 [[UIDevice currentDevice] se ...
- IOS 监控屏幕旋转
在viewDidLoad中增加通知 - (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor blac ...
- iOS传感器:实现一个随屏幕旋转的图片
作者 非典型技术宅 关注 2017.05.24 17:22* 字数 1568 阅读 351评论 7喜欢 14 在写上一个动画系列的时候学到了非常多的知识,也认识了很多人.例如受邀进入了某个神秘的动效组 ...
- IOS基础之iPad的屏幕旋转方向判断
IOS基础之iPad的屏幕旋转方向判断 #pragma mark - 屏幕旋转 - (void)viewWillTransitionToSize:(CGSize)size withTransition ...
最新文章
- [linux内核][linux中断]——软中断机制
- RUBY,玩玩~~~
- 共识算法的比较:Casper vs Tendermint
- linux多线程九宫格,项目实战:Qt九宫格图片资源浏览器(支持window、linux、兼容各国产系统,支持子文件夹,多选,全选,图片预览,行数与列数设置等)...
- mysql默认字符集和排序_MySQL字符集和排序规则
- java 调用php文件上传_php上传文件,接口是java,go。
- 实例--[QSerialPort]串口通信
- 《第一本无人驾驶技术书》扫描版PDF分享
- Redis(八):进阶篇 - 事务
- 去除字符串中的特殊符号及表情
- 什么是透视?什么是一点透视?
- 中图分类法----O 数理科学和化学
- 计算机处理io和cpu,虚拟化技术原理(CPU、内存、IO)
- sgu482 Impudent Thief (动态规划)
- word 全部更新域
- 2021-10-28 集训第三天 神奇的Tom猫
- java反序列化浅探
- 会聊天、提醒、撩妹的Python微信机器人你肯定没见过
- 微信付费进群收费进群系统源码 底部会显示价格(可自定义)入群
- Python Pareto柏拉图分析
热门文章
- 跟我学做c#皮肤美化(二)
- php web应用开发娄不夜,《PHP Web应用开发》娄不夜、张军著【摘要 书评 在线阅读】-苏宁易购图书...
- 正则表达式——文本定位
- 苹果手机如何清除微信记录?专业操作助你从此操作告别“假删除”!
- VMvare百度网盘分享
- 米家扫地机器人沒有系统重置键_米家扫地机器人如何恢复出厂设置
- opencv-contrib3.4.1编译及配置步骤,opencv_ffmpeg.dll、ippicv等失败的解决方法
- AI 选择、移动、对齐
- 关于QT的网上售卖车APP
- 懂车帝app是哪个公司