计算给定设备方向的 UIView 框架

Posted

技术标签:

【中文标题】计算给定设备方向的 UIView 框架【英文标题】:Compute frame of UIView for a given device orientation 【发布时间】:2013-06-25 04:40:29 【问题描述】:

我需要处理所有 ios 屏幕比例(3.5 英寸、4 英寸)。我没有使用autolayout,因为我需要iOS 5.x 兼容性。

在我的应用中,当设备方向发生变化时,我需要重新组织按钮和图标,从纵向切换:

Logo
-
Button 1
Button 2
Button 3

到风景:

       Button 1
Logo   Button 2
       Button 3

由于屏幕比例不同,我需要根据Button 1的Y位置调整纵向Logo的高度,根据Button 1的X位置调整横向Logo的宽度。

为了提供流畅的动画,我想实现:

  - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)

并启动一个与设备的旋转动画在同一时间轴上运行的动画。问题是我的计算需要“按钮 1”的目标框架(设备旋转后的框架),而我只有其初始状态的框架。

如果我等待初始旋转完成(这是我迄今为止实现的),您会看到应用程序执行旋转然后定位,这对我来说......不满意。

因此,在一个问题中,这将给出: “有没有办法在给定特定设备方向的情况下要求 UIView 的框架?也许故事板......”

它应该可以在某个地方访问,因为 iOS 动画必须计算此信息才能开始它的动画,对吗?

【问题讨论】:

你需要使用自动调整掩码... 您是否尝试过在 XIB 中自动调整大小? 你应该在纵向和横向模式下分别计算位置,然后使用自动调整蒙版以适应不同的屏幕解决方案 是的,当然我正在使用自动调整大小,但这还不够,因为我必须移动一些元素。我无法通过自动调整蒙版实现我想要的,我的问题是如何计算给定方向的框架,以便我可以正确定位我的元素与设备旋转动画同步 【参考方案1】:

查找屏幕边界的一种方法是执行以下操作:

CGRect screenBounds = [[UIScreen mainScreen] bounds];

【讨论】:

以上是关于计算给定设备方向的 UIView 框架的主要内容,如果未能解决你的问题,请参考以下文章

根据设备方向在 alloc/init 上设置正确的 UIView 帧大小

目标c:使用设备方向异步更新UIView

如何在 iOS 中随设备更改 [UIApplication sharedApplication].window 方向

在设备方向更改时交叉淡入某些 UIView

当设备方向更改 SWIFT 5 时重绘自定义 UIVIEW

处理 ios 设备方向