iOS 8和UIScreen大小调整问题

时间:2015-04-02 07:25:40

标签: ios objective-c iphone rotation

我们的应用程序包含Cocos3D和AR。自升级到iOS 8以来,由于Apple带给我们的变化,我们不得不修复我们的定向处理。

但是,我们仍然会遇到一些问题,这些问题会让我产生一个相当有趣的现象(我在我们的应用程序和一个全新的项目中进行了检查......):

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

轮换前

[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

第二次轮换后

[UIDevice currentDevice].orientation = 1

[UIApplication sharedApplication].statusBarOrientation = 4

[UIScreen mainScreen].bounds.size = 736x414

现在很明显,在第二次旋转之后,设备又回到纵向模式 - 不是根据界面方向和屏幕边界...

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

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

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

延迟功能是对单独[self performSelector:@selector(mySel) afterDelay:delay withObject:block];中定义的Functions.h调用的包装。