游戏卡在安全区域 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的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit - 安全区域布局 Iphone X

如果我使用 iPad 尺寸创建应用程序,如何找到 iPhone 尺寸的“安全区域”?

在 iPhone 游戏中隐藏图像的一部分

如何在 iPhone x 中设置安全区域布局

如何使用自动布局在 iphone x 中处理具有安全区域的键盘? [复制]

在 iPhone X 上使用安全区域插入的 UIViewControllerAnimatedTransitioning