在我的 iPhone OS 应用程序中,我想要(需要)观察设备方向的变化,以便重新排列屏幕的某些部分。我使用的方法是使用CGRect frame = [UIScreen mainScreen].applicationFrame
获取屏幕尺寸,并从那里计算其他控件的尺寸和/或位置(我也尝试过self.view.frame
).
到目前为止,所有测试都是在纵向模式下完成的,因此我可以专注于对主要功能进行编程,然后对横向模式进行一些调整。这里就出现了问题:-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
我添加了一些日志记录以在继续之前检查尺寸,但显然宽度和高度的值是“错误的”(我说“错误”是因为乍一看这些值对我来说没有意义)。
这是一些日志记录的输出:
- 旋转:横向 [w=300.000000,h=480.000000]
- 旋转:纵向 [w=320.000000,h=460.000000]
Landscape 中“w”和“h”的值对我来说似乎是相反的 - 我期望 w=480 和 h=300。
我究竟做错了什么?我用来调试的代码如下。
-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
CGRect frame = [UIScreen mainScreen].applicationFrame;
CGSize size = frame.size;
NSLog(@"%@", [NSString stringWithFormat:@"Rotation: %s [w=%f, h=%f]",
UIInterfaceOrientationIsPortrait(self.interfaceOrientation) ? "Portrait" : "Landscape",
size.width, size.height]);
}
您的设备的方向发生了变化,而不是屏幕的物理特性发生了变化。您基本上将其倾斜到一侧,但实际上它的宽度为 320 像素(由于状态栏正在显示,因此目前无法使用其中的 20 像素)和高度为 480 像素。如果您的视图是自动旋转的,则宽度/高度已为您转换,但是当您询问屏幕的实际尺寸时,您将得到屏幕的实际尺寸。
这也是为什么在使用翻译的视图时,基于视图的中心和视图的边界而不是视图的框架进行计算很重要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)