kmi*_*las 5 xcode orientation ipad ios swift
(Xcode 6,Swift,iOS8)
我试图找到iPad的设备方向,它似乎是不必要的复杂.我哪里错了?
起初,我尝试使用interfaceOrientation我的UIViewController,但它不可靠并且已弃用.Apple建议使用statusBarOrientation属性.(1)
statusBarOrientation属于类型UIApplication.我试图像这样创建一个实例:
var o: UIApplication
Run Code Online (Sandbox Code Playgroud)
然后测试:
if (o.statusBarOrientation.isLandscape) { ... }
Run Code Online (Sandbox Code Playgroud)
但收到错误
Variable 'o' used before being initialized.
Run Code Online (Sandbox Code Playgroud)
这对我毫无意义.为什么我要将它初始化为一个值?我会覆盖我想要的价值!?
然后我尝试按照文档中的建议创建一个变量:
var statusBarOrientation: UIInterfaceOrientation
Run Code Online (Sandbox Code Playgroud)
但是跟踪:
statusBarOrientation =(UIKit.UIInterfaceOrientation)(0xa0)
所以我尝试将UIApplication子类化,并通过我的子类访问该属性.
从这里开始,更加复杂.似乎"每个应用程序必须只有一个UIApplication实例(或UIApplication的子类)." (2)
这导致我发表以下帖子,这似乎Main在Swift中创建了一个例程?!
使用Swift子类UIApplication
同样,我的目标是获取当前的设备方向,并在条件下进行测试.Pseudocoded:
var o = (get device orientation)
if (o == portrait ) { ... } else { ... }
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我在杂草中...任何帮助都将非常感激.
编辑:我确实设法让它与以下工作类似:
var o = UIApplication.sharedApplication().statusBarOrientation;
if (o.isLandscape) { ...
Run Code Online (Sandbox Code Playgroud)
但是,在初始加载时,当设备旋转到横向时,o.isLandscape报告为false.
搜索"UIViewController"的文档,并查看"配置视图旋转设置".在Discussion"不要使用此属性来通知布局决策.而是使用UIApplication类参考中statusBarOrientation描述的属性. "
搜索"UIApplication"的文档并查看Subclassing notes
Mic*_*lum 10
这里似乎有一些问题我会尽力清理.首先,以下内容不会创建UIApplication的实例,只是该类型的变量:
var o: UIApplication
Run Code Online (Sandbox Code Playgroud)
如果要创建UIApplication的实例,您应该这样做:
let o: UIApplication = UIApplication()
Run Code Online (Sandbox Code Playgroud)
但是,正如你所发现的,这不会起作用UIApplication; 您不应该创建其他UIApplication实例.相反,您应该访问单例实例,sharedApplication():
let o: UIApplication = UIApplication.sharedApplication()
Run Code Online (Sandbox Code Playgroud)
注意: 您的方向变量与使用app delegate变量时遇到的问题相同.以下行没有说明要将哪个值放入变量statusBarOrientation; 它没有初始化:
var statusBarOrientation: UIInterfaceOrientation
Run Code Online (Sandbox Code Playgroud)
这些行中的任何一行都符合您的意图:
var statusBarOrientation: UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation
var o: UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation
let orientation = UIApplication.sharedApplication().statusBarOrientation
Run Code Online (Sandbox Code Playgroud)
无论如何,当你把它们放在一起时,你可以通过以下方式获得当前的状态栏方向.
if let theAppDelegate = UIApplication.sharedApplication() {
let orientation = theAppDelegate.statusBarOrientation
if orientation.isPortrait {
// Portrait
} else {
// Landscape
}
}
Run Code Online (Sandbox Code Playgroud)
也
您需要指定您的应用可以支持横向方向.这可以通过应用程序摘要中的方向复选框完成,也可以通过视图控制器支持的方向方法以编程方式完成(您可以在此处找到大量内容).
小智 6
这适用于Xcode 6.1,以避免使用if let语句时出现"条件绑定中的绑定值必须是可选类型UIApplication"错误.
let orientation = UIApplication.sharedApplication().statusBarOrientation
if orientation.isPortrait {
// Portrait
} else {
// Landscape
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5210 次 |
| 最近记录: |