iOS8:IScreen.mainScreen()。用于方向更改的边界不可靠。建议?

iOS8:IScreen.mainScreen()。用于方向更改的边界不可靠。建议?,ios,swift,ios8,device-orientation,Ios,Swift,Ios8,Device Orientation,如果我使用IScreen.mainScreen.bounds来获取方向更改后的屏幕大小,有时会得到错误的=与当前不显示的方向相关联的其他屏幕大小。我试图在通过通知中心添加到控制器的func中直接更新从IScreen.mainScreen.bounds获取的值: NSNotificationCenter.defaultCenter().addObserver(self, selector: "rotated", name: UIDeviceOrientationDidChangeNotificat

如果我使用IScreen.mainScreen.bounds来获取方向更改后的屏幕大小,有时会得到错误的=与当前不显示的方向相关联的其他屏幕大小。我试图在通过通知中心添加到控制器的func中直接更新从IScreen.mainScreen.bounds获取的值:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "rotated", name: UIDeviceOrientationDidChangeNotification, object: nil)
[...]
rotated() {
    myBounds = IScreen.mainScreen().bounds
}

但是,myBounds可以生成与当前偶尔不活动的方向相关的值,特别是在我最新一代iPad上快速更改方向时。我应该用另一种方法来获得屏幕大小吗?或者我应该在代码的其他地方读取IScreen.mainScreen.bounds中的值吗?

您必须使用mainScreen.bound返回的维度,然后考虑方向。使用以下方法:

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
                             duration:(NSTimeInterval)duration

捕捉方向变化。使用willRotateToInterfaceOrientation时,即使快速更改旋转,也应该能够捕获正在发生的方向更改。

通过覆盖ViewController中的ViewDidLayoutSubview,我似乎能够可靠地处理方向更改。我试过了,似乎效果不错。

谢谢你的建议。不幸的是,该方法被列为不推荐使用的方法:而且它也不排除这个问题。它仅返回方向更改前的当前值。这不会有帮助,因为在执行90°方向更改时得到的结果与执行180°方向更改时得到的结果相同。但这些情况显然不一样:我也尝试在相应的控制器中使用self.view.frame而不是IScreen.mainScreen.bounds,但两者的行为似乎相似。我确信这是可能的,因为它在Spotify应用程序中似乎正常工作: