如何强制旋转屏幕

Android6.0 旋转屏幕(四)应用强制设置方向 有时候我们也可以强制应用横频,这又是如何做到的? 就是调用了AMS的setRequestedOrientation接口,这个接口先是调用WMS的setAppOrientation函数设置这个Activity在WMS中的方向。然后在调用WMS的updateOrientationFromAppTokens函数旋转屏幕,最后在调用updateConfigurationLocked这个函数之前博客分析过 阅读详情

如何强制旋转屏幕

前言

如果做过项目中有视频播放的内容 一定遇到过全屏播放视频的需求 一般来说 直接弹出一个modal viewcontroller来全屏播放视频就ok了

但是为了用户体验 可能需要在同一个viewcontroller中进行全屏和非全屏的切换 这个时候可能就需要强制旋转屏幕来做到

那么如何完美的对屏幕进行强制旋转呢?

这里只讨论ios6+的方法(因为从ios6+起 屏幕旋转的api做了重要的变化 有需要的同学可以自己去探索一下ios6-的方法)

研究

首先 你得在项目的的plist中或者target的general选项里配置好APP所支持的所有放心啊个

然后 在ios6+之后 屏幕旋转的控制权交给了rootViewController(这里没探讨presentViewController的情况 只考虑普通的布局) 那么基本上所有的APP都是基于UINavigationController或者UITabbarViewController做为rootViewController的 所以要灵活的控制每个push进来的view的旋转 需要修改一下UINavigationController或者UITabbarViewController的以下几个方法(可以添加Category 也可以继承一下)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//UINavigationController
- (BOOL)shouldAutorotate
{
return self.topViewController.shouldAutorotate;
}
- (NSUInteger)supportedInterfaceOrientations
{
return self.topViewController.supportedInterfaceOrientations;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return self.topViewController.preferredInterfaceOrientationForPresentation;
}
//UITabbarViewController
//注意 这里的selectedViewController如果是UINavigationController的话 也需要对它做上面的修改
- (BOOL)shouldAutorotate
{
return self.selectedViewController.shouldAutorotate;
}
- (NSUInteger)supportedInterfaceOrientations
{
return self.selectedViewController.supportedInterfaceOrientations;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return self.selectedViewController.preferredInterfaceOrientationForPresentation;
}

这样 控制旋转的主动权就交还到了每个viewController的手上了

方法

在ios6中 使用如下的trick可以强制让屏幕进行旋转检测

1
2
3
4
UIViewController *vc = [[UIViewController alloc]init];
[self presentModalViewController:vc animated:NO];
[self dismissModalViewControllerAnimated:NO];

在ios7中 上面的方法不管用了 但是稍微改一改就可以了

1
2
3
4
UIViewController *vc = [[UIViewController alloc] init];
[self presentViewController:viewController animated:NO completion:^{
[self dismissViewControllerAnimated:NO completion:nil];
}];

虽然上面的办法确实可以触发对屏幕旋转的判断 但缺陷就是旋转起来不自然

实际上有个更好的方法

1
2
3
4
5
6
[[UIDevice currentDevice] setValue:
[NSNumber numberWithInteger: self.isFullScreen?UIInterfaceOrientationLandscapeRight:UIInterfaceOrientationPortrait]
forKey:@"orientation"];
//等价于
objc_msgSend([UIDevice currentDevice], @selector(setOrientation:), self.isFullScreen?UIInterfaceOrientationLandscapeRight:UIInterfaceOrientationPortrait);

在stackoverflow上看到有人说 此方法是私有方法 调用有可能会导致被reject

但是原创作者亲测上架无碍

[RK3399][Android9.0]强制旋转主屏幕方向 测试平台 Platform: RK3399pro OS: Android 9.0 需求 强制旋转主屏幕方向 解决方案 7.1.1之前旋转方向我们可以通过修改build.prop里的ro.sf.hwrotation=0属性实现,但是当9.0时此属性设置无效. 查看device/rockchip/common/device.mk下的代码发现 From 9cdb6424ba6df9dea03b26ff9... 阅读详情

相关推荐

强制屏幕旋转_Orientation_Control_1.4.apk

Orientation Control是一款手動強制切換屏幕方向的工具,支持桌面插件以及通知欄快捷設置,橫屏選擇Landscape,豎屏選擇Por​​trait即可。

两个强制屏幕旋转的方法

第一个:   ? 1 2 3 4 5 6 7 8 // 状态栏动画持续时间  CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration;  [UIView animateWithDuration:duration anima

u013302606的专栏 3301

OpenFOAM-v2006重叠网格挖洞问题实战:如何手动修复overset代码中的边缘识别缺陷

本文深入探讨了OpenFOAM-v2006中重叠网格挖洞问题的实战解决方案,重点修复overset代码中的边缘识别缺陷。通过逆向工程解析挖洞决策机制,设计最小侵入式的函数override方案,并建立多级验证体系,有效解决了网格挖洞区域覆盖不全的问题,提升了计算流体动力学模拟的准确性和可靠性。

weixin_29216049的博客 430

安卓屏幕旋转神器,一键控制显示方向

Rotation是一款专业的屏幕方向控制软件,提供一键切换横竖屏功能,完全不受应用本身限制。有时系统旋转功能还会出现方向错误或反向旋转的情况,特别是在躺着看视频时特别影响体验。软件提供8种显示模式:强制竖屏/横屏、反转竖屏/横屏、传感器竖屏/横屏、强制全传感器模式以及锁定当前方向,满足各种使用场景需求。支持为不同APP单独设置显示方向,但建议保持统一方向以避免视觉不适。开启悬浮窗功能后,可在任何APP内随时切换屏幕方向。

weixin_62784879的博客 897

【深度剖析】三一重工的数字化转型(中篇)

三一重工在数字化转型方面取得了提高效率、降低成本、加强研发创新和改善内控管理等多方面的成效。本研究旨在通过对三一重工数字化转型的深入分析,引导企业思考在第四次工业革命与第三次能源革命交汇的超级技术窗口期,如何进一步把握发展机遇,并为同行业其他企业提供探索性的建议。作为装备制造行业的佼佼者,三一重工的数字化转型受到了业界的广泛关注。作为行业内首批接触并实践数字化转型的企业之一,三一重工的转型经验不仅成功,而且积累了丰富的理论与实践,为其他制造业企业的数字化转型提供了可借鉴的范例。

领信卓越的博客 2305

IAR9.X半主模式异常解析:为何硬件复位后仍陷调试状态?

本文深入解析了IAR 9.X半主模式异常问题,探讨了硬件复位后MCU仍陷调试状态的原因及解决方案。通过分析半主模式工作机制,提供了禁用半主功能、重写低级IO函数等具体方法,并给出了版本兼容性处理和调试与量产配置分离的优化建议,帮助开发者有效解决复位异常问题。

oo7890的博客 604

安卓系统强制旋转屏幕实现横竖屏切换

我们要实现开机强制系统横屏或者竖屏,并且可以再系统中实时切换横竖屏,首先分析代码找到 WindowManagerService.java @Override public int getRotation() { return mRotation; } 查看WindowManagerService.java代码发现我们获取当前屏幕参数时返回的是mRotation参数,继续查看mRotation初始化调用 /** All DisplayContents

Leak LocK的博客 4854

BQ25798双电源输入4节电池升降压充电与最大功率跟踪于光伏板应用

介绍一颗具有窄范围直流电压NVDC、路径管理PPMT、光伏板最大功率跟踪及反向放电OTG升降压充电控制器,带I2C接口能对内部寄存器做控制

linkedin_38804946的博客 1674

强制屏幕方向——旋转设置

摘要:作者在选择平板时比较了iOS、安卓和Windows系统,最终选择了华为MatePad Pro安卓平板。但使用中发现某些应用会强制改变屏幕方向,即使系统设置了横屏锁定。通过安装强制屏幕旋转软件,结合悬浮菜单功能,实现了稳定的横屏显示。作者特别赞赏华为的多窗口功能,解决了安卓平板横竖屏切换的困扰。(149字)

2501_92222661的博客 867

axi ps读写pl_PL读写DDR:Datamover能干什么

最近发现工程项目中一直在用AXI-DMA。这玩意儿搬数据倒是没问题,就是用axi-lite配置起来非常反人类。。。简单的办法其实是用datamover ip核。这个ip核能干嘛呢。准备写个文章解析一下。由于好多feature没用过,所以仅仅看文档可能理解有误,欢迎指出错误。首先扫个盲:MM2S指的是Memory map to stream. 读DDR. S2MM指的是steam to memory...

weixin_35908791的博客 1596

WRFDA如何读取风云四号A 星的GIIRS数据?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1025

iOS强制旋转屏幕

// 状态栏动画持续时间 CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration; // 基础动画 [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:duration];

Simba's 1815

Spring AI 实战(11):收官!10 道面试高频题 + 一张脑图带走全系列

本文是Spring AI系列的收官篇,通过知识脑图梳理前10篇内容,提供面试高频题和避坑清单。主要内容包括: 知识脑图:分6层(核心抽象、输入增强、输出控制等)总结Spring AI全栈技术。 10道高频面试题:涵盖ChatClient/ChatModel关系、结构化输出、RAG链路等核心知识点。 避坑清单:列出9条常见问题及解决方案,如向量维度匹配、Advisor顺序等。 技术对比:分析Spring AI、LangChain4j和Spring AI Alibaba的差异与适用场景。 使用建议:提供面试复习

不才不才不不才的博客 295

android 屏幕方向强制,Android强制设置屏幕旋转方向 Force rotation

第一种方法:首先检查有没有权限,没有就去申请。申请时会触发frameworks/base/services/core/java/com/android/server/wm/AlertWindowNotification.java里面弹出可以覆盖view的权限窗口。检查和处理的code如下:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){...

weixin_39641697的博客 1175

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

通过优雅的方式强制旋转屏幕

谨慎能捕千秋蝉,小心驶得万年船             ——《庄子语录》 前言 方向旋转在日常App上基本都会用到,用的时候可能会因为赶工期而以实现功能为主,认真思考了为啥去这样做有没有bug或者后续的开发中是否还会用到。不只是屏幕旋转,还有其他的东西也是这样,导致之前做的时候感觉也会了,实际开发的时候,有时就会像喝断片一样。 此文的目的是为了加深理解和巩固一下知识记忆,...

weixin_34124651的博客 2242

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

iOS 强制旋转屏幕

前言在开发中有时会碰到旋转屏幕的需求,例如直播时横竖屏推流,这里我使用的一种方法时用纯代码强制翻转,其他晚上方法也都使用过,但是效果并不好,目前这个方法还可以。步骤 1.AppDelegate中配置 //AppDelegate.h #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate>

C_calary的博客 3312

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

iOS强制屏幕旋转

/** 强制旋转屏幕为纵向 (注:这种方式 键盘不能旋转过来; iOS8.x下 UIAlterView旋转不过来 ) @return */ + (void)rotateOrientationPortrait{ if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) { ...

weixin_34007291的博客 114

iOS两个强制旋转屏幕的方法

// 第一个 - (void)doForceScreenRotate() { // 状态栏动画持续时间 CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration; [UIView animateWithDuration:duration animati

碧水蓝天 2695

android 強制屏幕方向,今日精品安卓App推荐:锁定屏幕旋转方向

【PConline 资讯】不知道各位用安卓的朋友有没有遇到过这样一种情况,玩某个游戏横屏时屏幕向右转,另一个游戏就向左转了,用某些播放器如新闻客户端之类的看视频,甚至还不能横屏。安卓上横屏方向不统一的确非常蛋疼,有没有什么办法能够解决这个问题呢?今天推荐的这款终极旋转控制(Ultimate Rotation Control)App就能解决这个问题。软件名称:终极旋转控制软件版本:5.2.1软件大小...

weixin_32558527的博客 3601

iOS 强制旋转屏幕 的代码实现

最近项目中 需要视频通话这一块的强制旋转 遇见电视通话 就按横屏显示 遇见手机 就按竖屏 废话少说 直接上强制横屏代码 (void)setOrientation:(UIInterfaceOrientation)orientation { SEL selector = NSSele...

243

iphone强制旋转屏幕_锁定iPhone屏幕旋转

iphone强制旋转屏幕iPhone’s automatic screen rotation is convenient. However, it is annoying under some situation, such as reading email in the bed. Fortunately, starting from iOS 4/iOS 5, iOS has an option ...

cuma2369的博客 1194

iOS 强制屏幕实现旋转功能

1.创建工程,设置Device Orientation 2.在AppDelegate中实现下面这个方法: - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { if (self.allowRotation) { return UIInterfaceOrientationMas

u014710448的博客 2367

iOS屏幕旋转,强制横竖屏

在 iPhone 应用里,有时我们想强行把显示模式从纵屏改为横屏(反之亦然),特别是需要展示音频,视频播放器的时候需要进行横竖屏切换,下面做下横竖屏总结,如有不全面之处欢迎留言补充。     目前横竖屏旋转方式分为手动和自动 手动旋转 手动旋转也有2种方式,一种是直接设置 UIDevice 的 orientation,但是这种方式不推荐,上传appStore有被拒的风险:

YCM1101743158的博客 8939

iOS屏幕强制旋转

接手一个项目,其中部分页面是横屏、部分页面是竖屏。 求助百度、谷歌很久,找不到完美解决方案,尤其是许多方案使用了苹果私有或即将舍弃的API。 结果反复试错,得出一种目前看来完美的解决方法:项目设置里,选中APP支持的屏幕方向;重写页面对应的UIViewController里的三个方法,固定页面屏幕方向。 下面以支持左横屏和竖屏的APP为例,记录实现方法。 1、设置APP支持左横屏和竖屏。

fgrass的专栏 1012
上一篇: 实现一个简单的手势解锁
下一篇: 个人总结的一些 APP 的代码实践
iOSDING
博客等级 码龄12年 2粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值