在Init功能中检测设备方向

时间:2016-09-06 15:18:06

标签: ios swift ipad landscape-portrait

我正在使用以下代码行检测设备方向:

UIDevice.currentDevice().orientation.isPortrait.boolValue
UIDevice.currentDevice().orientation.isLandscape.boolValue

我检测到它是否是带有此代码的iPad:

userInterfaceIdiom == .Pad

我在commonInit()函数中使用了此代码,该函数在Init()函数中调用。当我在iPad上执行我的代码时,前两行返回false这两个不正确,其中一行应该是true。第三行工作正常。

如果我在其他函数中使用代码,例如supportedInterfaceOrientations(),它可以正常工作。你知道这可能是什么问题吗?

1 个答案:

答案 0 :(得分:1)

您可能忽略了此文档:

  

您还可以使用UIDevice实例来检测设备的更改   特征,如身体取向。你得到了最新的   使用orientation属性或接收更改的方向   通过注册的通知   UIDeviceOrientationDidChangeNotification通知。 使用前   要获得方向数据,要么必须启用这些技术   使用beginGeneratingDeviceOrientationNotifications进行数据传递   方法即可。当您不再需要跟踪设备方向时,请致电   endGeneratingDeviceOrientationNotifications方法禁用   提交通知。

此外,这是一个三维方向。你可能不希望这样。简单地orientation属性的实际值是多少?参见:

enum UIDeviceOrientation : Int {
    case Unknown
    case Portrait
    case PortraitUpsideDown
    case LandscapeLeft
    case LandscapeRight
    case FaceUp
    case FaceDown }

你真正想要的可能是: "interfaceOrientation" is deprecated in iOS 8, How to change this method Objective C

  

有时TraitCollections不能满足您的所有设计需求。对于   在这些情况下,Apple建议比较视图的界限:

     

如果view.bounds.size.width> view.bounds.size.height {       // ...}