计算给定设备方向的 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 帧大小