(Xcode 6,Swift,iOS8)
我试图找到iPad的设备方向,但似乎这是一个不必要复杂的过程。我错在哪里了?
起初,我尝试使用我的UIViewController的interfaceOrientation
,但这是不可靠和已弃用的。苹果建议使用statusBarOrientation属性。(1)
statusBarOrientation是UIApplication
类型的。我尝试创建一个实例:
var o: UIApplication
然后进行测试:
if (o.statusBarOrientation.isLandscape) { ... }
但是收到了错误。
Variable 'o' used before being initialized.
这对我来说毫无意义。为什么要将其初始化为一个值?我会覆盖我想要的值!
然后,我尝试按照文档中的建议简单地创建一个变量:
var statusBarOrientation: UIInterfaceOrientation
但是在一个轨迹上:
statusBarOrientation = (UIKit.UIInterfaceOrientation) (0xa0)
因此,我尝试子类化UIApplication,并通过我的子类访问该属性。
从这里开始更复杂了。看起来“每个应用程序必须恰好有一个UIApplication实例(或UIApplication的子类)。”(2)
这引导我看到了以下帖子,似乎在Swift中创建了一个Main
程序?!
Subclass UIApplication with Swift
再次强调,我的目标是获取当前设备方向,并在条件语句中进行测试。伪代码如下:
var o = (get device orientation)
if (o == portrait ) { ... } else { ... }
如您所见,我陷入了困境……非常感谢您的帮助。
编辑:我使用以下方法成功地解决了问题:
var o = UIApplication.sharedApplication().statusBarOrientation;
if (o.isLandscape) { ...
然而,在初始加载时,当设备旋转到横向时,
o.isLandscape
被报告为false
。
- 搜索“UIViewController”文档,并查看“配置视图旋转设置”。在“讨论”下,“不要使用此属性来通知布局决策。相反,请使用描述在UIApplication Class Reference中的
statusBarOrientation
属性。” - 搜索“UIApplication”文档并查看子类说明。
var o: UIApplication
时,你指定了这个变量应该被称为o
并具有UIApplication
类型,但它从未被赋值。在var o: UIApplication = UIApplication()
中,o是一个新创建的... - Mick MacCallum