这可能是一个简单的问题,但因为我是一个初学者,它是最好的问.
正如标题所说,我应该使用什么来代替UIScreen.mainScreen().applicationFrame
,因为它在9.0中被弃用。
如果可能的话,这将是伟大的,如果你能提供一个样本或例子,因为我发现苹果文件困难。
目前我使用下面的代码,但我希望改变它的新版本。我很乐意听到你!
let sizeRect = UIScreen.mainScreen().applicationFrame
let posX = arc4random_uniform(UInt32(sizeRect.size.width))
let posY = arc4random_uniform(UInt32(sizeRect.size.height))
Enemy.position = CGPoint(x: CGFloat(posX), y: CGFloat(posY))
6条答案
按热度按时间mbjcgjjk1#
用途
斯威夫特3+:
cbjzeqam2#
我知道
UIScreen.mainScreen().bounds
是推荐的替代方案;然而,它并不完全等同于UIScreen.mainScreen().applicationFrame
,特别是当你的应用程序没有占据整个屏幕时,这种情况发生在某些iPad上的分割视图和滑动功能上。在这种情况下,这是一个很好的选择:
UIApplication.sharedApplication.keyWindow.frame
。(当然keyWindow
必须可用,也就是说,您确实调用了makeKeyAndVisible
)72qzrwbm3#
从swift 3开始你现在需要这样使用它。
ruoxqz4g4#
适用于:
以及:
q8l4jmvw5#
斯威夫特3+:
50few1ms6#
不幸的是,
UIScreen.main
和UIScreen.mainScreen()
自iOS 16以来均已弃用。Apple不鼓励使用此符号。请使用通过上下文找到的UISscreen示例。例如,通过管理包含视图的窗口的窗口场景上的screen属性引用显示视图的屏幕。
像往常一样,苹果的文档很擅长告诉你什么不该做,但很少给予你什么该做的例子。所以经过一些搜索和测试,我想出了自己的解决方案。
我创建了一个带有静态函数的helper类,它允许我访问当前场景,并从那里访问窗口和屏幕。
此解决方案仅适用于iOS等单窗口应用程序,对于iPad和macOS应用程序还需要做一些额外的工作。
我的解决方案来自this thread中的响应组合,两个答案都在主应用程序条目中创建了一个
UIWindow?
变量。第一个Response
第二个
我不赞成第二个响应,因为它从
UIWindowScene
创建了一个新的UIWindow
,您可以从UIWindowScene
访问一个窗口数组。我对这个解决方案的第一次尝试是创建一个帮助器和一些便利函数,然后将它们公开到
View
上。助手
我选择从委托访问
UIScene
,而不是将UIScene
强制转换为UIWindowScene
,因为根据Apple的documentation forUIScene
,它是:对象,表示应用程序使用者界面的一个执行严修。
阅读苹果的documentation for
UIWindowScene
让我相信通过代理获得它是更可靠的方法。我很好奇在info.plist中使用UISceneConfiguration
条目是否更好?分机号
我不是一个经验丰富的Swift开发人员,所以我相信有一个更好的解决方案。我想知道什么是更好的解决方案?看起来
UIScreen.main
是一个非常常见的对象,建立一个新的使用模式将是伟大的。