我们的应用程序包含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
现在很明显,在第二次旋转之后,设备又回到纵向模式 - 不是根据界面方向和屏幕边界...
我在这里错过了什么吗?
答案 0 :(得分:1)
我以前遇到过这个问题,并得出结论,当您为UIDeviceOrientationDidChangeNotification
设置观察者时,在所有属性发生变化以反映新方向之前调用您指定的方法。我处理它的方法是创建一个函数,在延迟后运行一段代码,然后调用:
- (void)deviceOrientationDidChange:(NSNotification *)note
{
RHRunBlockAfterDelay(0.5, ^{
// Execute relevant code...
});
}
延迟功能是对单独[self performSelector:@selector(mySel) afterDelay:delay withObject:block];
中定义的Functions.h
调用的包装。