iOS 屏幕旋转 及注意事项

保姆级教程:将YOLOv8模型封装成Docker镜像,集成到CVAT实现自动标注 本文提供了一份详细的保姆级教程,指导如何将YOLOv8模型封装成Docker镜像并集成到CVAT平台,实现自动化标注。通过环境配置、模型服务化封装、Docker镜像构建与优化、CVAT平台集成等步骤,帮助开发者高效完成计算机视觉项目的自动标注工作流,显著提升标注效率。 阅读详情

一、屏幕旋转机制: 

  iOS通过加速计判断当前的设备方向和屏幕旋转。当加速计检测到方向变化的时候,屏幕旋转的流程如下:

  1、设备旋转时,系统接收到旋转事件。

  2、系统将旋转事件通过AppDelegate通知当前的主Window。

  3、window通知它的rootViewController。

    4、rootViewController判断所支持的旋转方向,完成旋转。

  iOS系统中屏幕旋转事件没有像触碰事件那样进行hitTest,所以只有rootViewController才能接收到屏幕旋转的事件,在其他viewController中实现旋转控制方法是不会被调用的。当屏幕旋转时应用程序会发出UIDeviceOrientationDidChangeNotification通知,这样任何关系方向变化的view都可以通过注册该通知,在设备方向发生变化的时候发生响应。

 

 

  在响应设备旋转时,我们可以通过UIViewController的方法实现更细粒度的控制,当view controller接收到window传来的方向变化的时候,流程如下:

 

  1、首先判断当前viewController是否支持旋转到目标方向,如果支持则继续,否则流程就此结束。

 

  2、调用 willRotateToInterfaceOrientation:duration: 方法,通知view controller将要旋转到目标方向。如果该viewController是一个container view controller的话,它会继续调用其content view controller的该方法。这个时候我们也可以暂时将一些view隐藏掉,等旋转结束以后在现实出来。

 

  3、window调整显示的view controller的bounds,由于view controller的bounds发生变化,将会触发 viewWillLayoutSubviews 方法。这个时候interfaceOrientation和statusBarOrientation方向还是原来的方向。

 

  4、接着当前view controller的 willAnimateRotationToInterfaceOrientation:duration: 方法将会被调用。系统将会把该方法中执行的所有属性变化放到animation block中。

 

  5、执行屏幕旋转动画。

 

  6、最后调用 didRotateFromInterfaceOrientation: 方法,通知view controller旋转动画执行完毕。这个时候我们可以将第二部隐藏的view再显示出来。

 

  整个响应过程如下图所示:

 

 

  

 

  以上就是UIKit下一个完整的屏幕旋转流程,我们只需要按照提示做出相应的处理就可以完美的支持屏幕旋转。

二、旋转机制实现

 

 

  iOS5屏幕旋转控制

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return YES;
}

  返回YES就是允许旋转,NO就是不允许

  根据toInterfaceOrientation 可以控制屏幕允许旋转的方向,比如不支持Home按钮朝上这种屏幕方向。代码如下:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
   if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        return NO;
    }
    return YES;
}

  

  这种方法已经被苹果列为deprecated。但为了兼容iOS5及以前的版本还需要继续实现。

 

  iOS6屏幕旋转控制

  - (BOOL)shouldAutorotate  默认返回YES,当为YES时允许转屏,否则为不允许。

  - (NSUInteger)supportedInterfaceOrientations 决定可以转哪个方向。如果所有方向都支持返回 UIInterfaceOrientationMaskAll,如果不允许Home键朝上返回UIInterfaceOrientationMaskAllButUpsideDown。

 

三、注意事项

  1、旋屏后的frame

  如果直接把window.rootviewController = (UIViewController*)vc;旋屏的时候vc的frame一直都是保持竖屏状态,bounds是正确的。
  如果使用UINavigationController的rootviewControoler 设置为vc,然后那NavigationControllerView去作为window的rootView,在旋屏的时候会发现vc的frame和bounds都是正确的。
  结论:判断屏幕尺寸用bounds比frame更准确。
 
  2、如果viewController或者view是隐藏状态的话就接收不到屏幕旋转事件,那么重新显示就会有问题。可以通过 viewWillAppear 函数解决这个问题。
  3、屏幕旋转的时候,让界面暂时不响应事件。
  4、对于view层级比较复杂的视图,使用截图替换当前的视图,旋转完成后再替换回原来的视图。
  5、旋转后调用tableview的reload方法,保证屏幕尺寸变化后cell可以充满全屏。
《基于FPGA的数字信号处理》专栏的导航与说明 阅读详情

相关推荐

Python解析骑行fit文件:从数据缺失到完整记录

本文详细介绍了如何利用Python解析和处理骑行FIT文件,解决数据缺失问题。通过使用fitparse库读取二进制FIT文件,并结合Garmin FitCSVTool进行格式转换,指导读者一步步诊断数据完整性、设计心率修补方案,并最终生成完整的骑行记录文件。该方法为骑行爱好者提供了灵活的数据修复与自定义分析能力。

weixin_29062255的博客 456

iOS学习笔记(3)— 屏幕旋转

一、屏幕旋转机制:   iOS通过加速计判断当前的设备方向和屏幕旋转。当加速计检测到方向变化的时候,屏幕旋转的流程如下:   1、设备旋转时,系统接收到旋转事件。   2、系统将旋转事件通过AppDelegate通知当前的主Window。   3、window通知它的rootViewController。 4、rootViewController判断所支持的旋转方向,完成旋转。...

weixin_30338481的博客 185

优快云余额充值前必读:这5个隐藏条款,90%的开发者都忽略了(附iOS内购避坑指南)

本文揭示了优快云余额充值中90%开发者忽略的5个隐藏条款,包括不可退款规则、iOS内购限制、账号安全责任等关键内容,特别提供了iOS内购避坑指南,帮助开发者避免资金损失和账号风险。

weixin_26765287的博客 147

ios 屏幕,状态栏(statusbar),程序窗口 尺寸获取和屏幕旋转时的尺寸变化

app尺寸,去掉状态栏 CGRect r = [ UIScreen mainScreen ].applicationFrame; 这个尺寸不会随着屏幕旋转而交换宽高,但屏幕旋转后,会自动修改宽高减掉状态栏高度。 竖屏时(4寸):x=0, y=20, width=320, height=548 横屏时(4寸):x=0,y=0, width=300, height=568

zcsoft 1万+

树莓派与ROS2

树莓派与ROS2(Robot Operating System 2)的结合使用为机器人开发、自动化控制以及物联网项目提供了强大的平台。

weixin_47695827的博客 1754

WPF数据可视化:LiveCharts自定义X轴与Y轴的5个实战技巧(附完整代码)

本文详细介绍了在WPF应用中使用LiveCharts进行数据可视化时,自定义X轴与Y轴的5个核心实战技巧。内容涵盖精确控制刻度步距、深度定制视觉样式、实现多轴布局对比、优化显示空间以及构建响应式动态轴,并提供了完整的C#和XAML代码示例,帮助开发者创建专业且用户体验出色的图表。

moss5的博客 691

oc 控件视图旋转以及frame的变化

有这样的的一个VIew 点击Button后进行45度的旋转。 两种方式都可以     NSLog(@"self.view2.frame - x - %f y -%f w -%f d -%f",self.view2.frame.origin.x,self.view2.frame.origin.y,self.view2.frame.size.width,self.view2.frame.

li198847的博客 4339

Blender地形建模实战:5步搞定Gazebo仿真地形(附避坑指南)

本文提供了一份详细的Blender地形建模实战指南,旨在帮助开发者快速创建Gazebo仿真地形。文章通过五个核心步骤,从环境准备、地形雕刻、模型优化导出,到创建Gazebo模型包及问题排错,系统讲解了如何将Blender中的地形模型成功导入Gazebo进行机器人仿真,并重点分享了关键的避坑经验。

weixin_28475533的博客 345

IOS16横竖屏适配

/横屏UIInterfaceOrientationPortrait。//更新view的位置与大小 下面是我的界面可以换成你自己的。//更新view的位置与大小 下面是我的界面可以换成你自己的。/// - interfaceOrientation: 目标屏幕方向。/// - viewController: 所在的视图控制器。(size.width>size.height) {//横屏。/// - errorHandler: 错误回调。(btn.selected) {//放大。

墨雪 2001

[ vulhub漏洞复现篇 ] Drupal XSS漏洞 (CVE-2019-6341)

[ vulhub漏洞复现篇 ] Drupal XSS漏洞 (CVE-2019-6341) Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成,在GPL2.0及更新协议下发布。Drupal在某些情况下,通过文件模块或者子系统上传恶意文件触发XSS漏洞。

qq_51577576的博客 2208

Scale-up,scale-out技术概述

本文系统分析了Scale-up与Scale-out两种扩展技术在现代计算中的应用与发展。Scale-up通过增强单节点性能,适用于高耦合任务,而Scale-out通过横向扩展节点,实现高可用性和无限扩展。在芯片层面,Chiplet技术推动Scale-up发展;在数据中心层面,二者协同工作构建强大集群。光模块在长距离高带宽传输中发挥关键作用。文章对比了NVIDIA、AMD和Broadcom三家公司的技术路线,指出NVIDIA采用封闭生态,AMD选择开放标准,Broadcom则主导底层连接技术。未来发展方向将聚

元直的博客 1446

iOS(iPhone/iPad) 屏幕旋转响应函数的缺点与窗口大小位置调整,以及解决办法

1,UIViewController响应屏幕旋转的缺点: (1)旋转之前响应的操作缺点: - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration; 在这里面处理窗口控件大小位置调整,最大的问题就是不能通

H_O_W_E的专栏 3625

【Embabel Agent】生产级最佳实践与避坑指南

本文围绕架构师最关心的 8 大维度展开:测试策略(FakeOperationContext 实现 Action 级单元测试、Prompt 质量与敏感信息校验)、MCP 集成实战(STDIO/HTTP 双模式、自建 Server、Docker MCP 生态)、RAG 检索增强、OpenTelemetry 全链路可观测性与追踪、Docker/K8s 生产部署、API Key 管理与 @Tool 安全防护、模型选择/缓存/并行等性能优化,以及过度依赖 LLM、忽略错误处理等 8 大常见反模式避坑指南。

program哲学 306

ios屏幕旋转注意事项

下面是一些代码: - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; //返回yes表示支持屏幕的旋转哦,如果为no,你的view将不会跟随屏幕旋转 } - (void)willRotateToInterfaceOr

万里独行 2544

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

iOS Interface Orientation

获得当前屏幕方向 self.interfaceOrientation或[[UIApplication sharedApplication] statusBarOrientation]  if (self.interfaceOrientation==UIDeviceOrientationLandscapeRight) { XXOO } 不旋转,保持竖屏 //iOS 5 - (BO

NYH1006的专栏 1569

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

屏幕旋转学习笔记

加速计是整个IOS屏幕旋转的基础,依赖加速计,设备才可以判断出当前的设备方向,IOS系统共定义了以下七种设备方向: typedef NS_ENUM(NSInteger, UIDeviceOrientation) {     UIDeviceOrientationUnknown,     UIDeviceOrientationPortrait,            // Devi

zhaojian3513的专栏 362

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

iOS6以上屏幕旋转详解

屏幕旋转的研究理由: 因为本人从事视频类的iOS开发工作,经常项目中经常会遇到需要在不同的页面对屏幕方向进行控制,例如正常的列表页面都只支持竖屏不能旋转,而播放页面需要能够控制旋转 : - 手动点击全屏进入全屏并保持全屏不自动旋转; - 旋转屏幕能够屏幕能够自动旋转。 相信很多人也在屏幕旋转上遇到过不同的疑惑与阻碍,下面介绍实现方式,以及遇到的坑。 屏幕旋转基础 我们能

猪猪的思维有点长的博客 1116

iOS 屏幕旋转的实践解析

iOS 屏幕旋转的实现涉及到一堆枚举值和回调方法,对于没有做过旋转相关需求的开发来说,可能一上来就晕了,所以我们先动手,让屏幕转起来吧。 实现旋转的方式主要有两种,跟随手机感应旋转和手动旋转,接下来对这两种方式进行逐一介绍。

Rey的技术博客 888

屏幕旋转学习笔记(转载)

  加速计是整个IOS屏幕旋转的基础,依赖加速计,设备才可以判断出当前的设备方向,IOS系统共定义了以下七种设备方向: typedefNS_ENUM(NSInteger, UIDeviceOrientation) { UIDeviceOrientationUnknown, UIDeviceOrientationPortrait, // Device ...

bangjiejuan2225的博客 208

iOS 屏幕旋转

加速计是iOS屏幕旋转的硬件基础。依赖加速计,设备才可以判断出当前的设备方向。iOS系统共定义了以下七种设备方向: typedef NS_ENUM(NSInteger, UIDeviceOrientation) { UIDeviceOrientationUnknown, UIDeviceOrientationPortrait, // Device orien

iShareStudio 661

ios屏幕旋转学习笔记

加速计是整个IOS屏幕旋转的基础,依赖加速计,设备才可以判断出当前的设备方向,IOS系统共定义了以下七种设备方向: typedef NS_ENUM(NSInteger, UIDeviceOrientation) {     UIDeviceOrientationUnknown,     UIDeviceOrientationPortrait,            // Devi

Su_tianbiao的专栏 692

IOS6屏幕旋转详解(自动旋转、手动旋转、兼容IOS6之前系统)

概述: 在iOS6之前的版本中,通常使用 shouldAutorotateToInterfaceOrientation 来单独控制某个UIViewController的方向,需要哪个viewController支持旋转,只需要重写shouldAutorotateToInterfaceOrientation方法。 但是iOS 6里屏幕旋转改变了很多,之前的 shouldAutorotateToI

NYH1006的专栏 1061

IOS6屏幕旋转详解(自动旋转、手动旋转、兼容iOS6 之前)

转http://blog.youkuaiyun.com/cococoolwhj/article/details/8208991# 概述: 在iOS6之前的版本中,通常使用 shouldAutorotateToInterfaceOrientation 来单独控制某个UIViewController的方向,需要哪个viewController支持旋转,只需要重写shouldAutorotate

暖 687

IOS:屏幕旋转学习笔记

屏幕旋转学习笔记     加速计是整个IOS屏幕旋转的基础,依赖加速计,设备才可以判断出当前的设备方向,IOS系统共定义了以下七种设备方向: typedef NS_ENUM(NSInteger, UIDeviceOrientation) {    UIDeviceOrientationUnknown,    UIDeviceOrientationPortrait,            //...

weixin_34318956的博客 216

【转】IOS设备旋转的内部处理流程以及一些【优化建议】

加速计是整个IOS屏幕旋转的基础,依赖加速计,设备才可以判断出当前的设备方向,IOS系统共定义了以下七种设备方向: typedef NS_ENUM(NSInteger, UIDeviceOrientation) {    UIDeviceOrientationUnknown,    UIDeviceOrientationPortrait,            // Device oriente...

weixin_33998125的博客 144

IOS开发——手动设置屏幕旋转

在移动开发过程。您可能需要跨越看看你的手机。有可能是所有的接口必须跨越,有可能是一个交叉通过电话,当用户当,你的接口也希望他能跨越。还有可能的是,界面的一部分需要被侧向显示。视情况而定,有不同的方法来解决。 首先,我们想澄清,以两种方式方向,向。一种是视图方向。设备方向有两种方式能够改变,一个是通过重力加速计,即旋转屏幕的方式去改变,一个是通过代码,调...

weixin_33924312的博客 302
上一篇: UIView 用户事件相应总结1
下一篇: UITableView中Cell的重用机制
皓浩
博客等级 码龄18年 157粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值