游戏卡在安全区域 iPhone Xs
Posted
技术标签:
【中文标题】游戏卡在安全区域 iPhone Xs【英文标题】:Game stuck inside safe area iPhone Xs 【发布时间】:2019-04-20 06:02:47 【问题描述】:我更新了我认为会支持 iPhone Xs 和 iPad 11 英寸的游戏,它完全适合模拟器上的屏幕(非常令人沮丧),但在物理设备上进行测试时却不行。似乎 rootView(我的 SKView)被限制在安全区域插图中。游戏场景就像这张图一样被约束。
我在 UIViewController 类中使用此方法将根视图制作为具有设备屏幕大小的 SKView。
override open func loadView()
view = SKView(frame: UIScreen.main.bounds)
然后创建一个与 SKView 具有相同纵横比(但大小不同)的场景,并让它缩放以适应 SKView。例如,对于 iPhone X/Xs/XsMax/Xr,someSpecifiedSize 将为 (812,375),对于 iPhone 5、6、7、8 为 (667,375),对于除 11 英寸以外的所有 iPad 为 (667,500)。这可能很奇怪,但由于我的游戏性质,它必须是这样的。
let scene = SKScene(size: someSpecifiedSize)
scene.scaleMode = .aspectFill
我不明白为什么视图包含安全区域,因为我在定义其大小时没有使用插图。如何使 SKView 成为设备屏幕的大小而不是 safeArea 的大小?
【问题讨论】:
您是否尝试过使用控制器下视图的属性边界? 不确定你的意思。如何使用它们? 你是不是碰巧关掉了情节提要中的安全区? @Knight0fDragon 我不使用情节提要。我以编程方式创建视图和场景。是否可以在不使用情节提要的情况下将其关闭? 您确定您甚至没有使用默认情节提要吗?顺便说一句,我强烈建议使用情节提要,减少混乱。 【参考方案1】:此代码实际上可以按您的意愿工作:
self.view = SKView(frame: view.bounds)
let scene = SKScene(size: view.bounds.size)
let skView = view as! SKView
skView.showsFPS = true
skView.showsNodeCount = true
skView.ignoresSiblingOrder = true
scene.scaleMode = .resizeFill
scene.backgroundColor = .green
skView.presentScene(scene)
您的问题似乎是变量“someSpecifiedSize”,我不知道实际是什么,但我想它尊重安全区域。
【讨论】:
如果可以的话,我想远离 resizeFill scaleMode,因为它会使 iPad 上的场景太大,导致物理行为与 iPhone 版本不同。我更新了问题以澄清“someSpecifiedSize” @Muffinman2497 当您将 scaleMode 更改为 aspectFill 使用此代码时,您可以在没有保险箱的情况下获得所需的全屏,因此结果与 iPhone X 系列相同 除了调整大小填充与场景尺寸混淆,这意味着在每台设备上您都提供不同的体验 另外,这打破了约束,搞砸了情节提要,这将得到我的反对,直到它得到更好的澄清。 @Knight0fDragon 不确定,但似乎 StoryBoard 并未参与此案,它也适用于 .aspectFill以上是关于游戏卡在安全区域 iPhone Xs的主要内容,如果未能解决你的问题,请参考以下文章
如果我使用 iPad 尺寸创建应用程序,如何找到 iPhone 尺寸的“安全区域”?