2015-04-02 54 views
0

我们的应用程序由Cocos3D和AR组成。由于升级到iOS 8,我们必须修复Apple定位处理,因为苹果给我们带来了变化。iOS 8和UIScreen尺寸问题

但是,我们仍然遇到一些问题,导致我一个颇为有趣的现象(我检查它在我们的应用程序,并在一个全新的项目。):

记录的[UIDevice currentDevice].orientation[UIApplication sharedApplication].statusBarOrientation[UIScreen mainScreen].bounds.size表明,当该装置快速旋转,设备的方向实际上改变,但接口的方向有时会保持不变,并导致屏幕边界的计算错误......例如:

旋转之前10

[UIDevice currentDevice].orientation = 1

[UIApplication sharedApplication].statusBarOrientation = 1

[UIScreen mainScreen].bounds.size = 414x736

第一次旋转后:

[UIDevice currentDevice].orientation = 4

[UIApplication sharedApplication].statusBarOrientation = 4

[UIScreen mainScreen].bounds.size = 736x414

2旋转后:

[UIDevice currentDevice].orientation = 1

[UIApplication sharedApplication].statusBarOrientation = 4

[UIScreen mainScreen].bounds.size = 736x414

现在很明显,第二旋转后,该设备是早在肖像模式 - 也没有根据界面方向和屏幕边界...

我在这里错过了什么吗?

+0

你在哪里登录结果?我的意思是你用哪种方法调用NSLog。 – LoVo 2015-04-02 07:33:56

+0

为'UIDeviceOrientationDidChangeNotification'添加了一个观察者,导致一个名为'orientationDidChange'的方法(我的方法) – GalSab 2015-04-02 07:38:04

+0

UIDeviceOrientation并不总是UIInterfaceOrientation。例如,当您的设备在普通桌面上时,您可能会收到意外的值。 – LoVo 2015-04-02 07:41:23

回答

1

我在过去曾遇到过这个问题,并得出结论,当您将观察者设置为UIDeviceOrientationDidChangeNotification时,您指定的方法会在所有属性更改以反映新方向之前调用。我处理的方式是创建一个延迟之后运行的代码块的函数然后调用:

- (void)deviceOrientationDidChange:(NSNotification *)note 
{ 
    RHRunBlockAfterDelay(0.5, ^{ 
     // Execute relevant code... 
    }); 
} 

延迟函数是在一个单独的Functions.h定义为[self performSelector:@selector(mySel) afterDelay:delay withObject:block];调用的包装。

+0

您,先生,钉牢它。非常感谢你。现在我能找到的最短延迟是0.25。仍然显而易见的寿,但它做到了这一点。 – GalSab 2015-04-03 11:52:47