【问题标题】:SpriteKit GameScene Rotation BugSpriteKit GameScene 旋转错误
【发布时间】:2016-01-21 21:52:29
【问题描述】:

我最近在尝试使应用程序通用和纵向时遇到了这个应用程序的问题(以前的版本仅在 iPhone 上是横向的)。现在应用会以纵向打开并且看起来正确,但是当设备旋转时它仍然是纵向的。

这是目前我用于旋转设备的所有代码(有效):

override func shouldAutorotate() -> Bool {
    return true
}

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
        return .AllButUpsideDown
    } else {
        return .All
    }
}

但是,这只会旋转设备,而不是包含我的游戏的实际 GameScene。如果应用从横向主屏幕启动,游戏将保持横向。

出于测试目的,我可以从模拟器主屏幕退出并重新启动应用程序,游戏将再次完美运行直到设备旋转

如何始终以正确的方向呈现 GameScene?

【问题讨论】:

  • 您在viewDidLoadviewWillLayoutSubviews 中展示skView
  • 我使用viewDidLoad,我尝试将其切换为viewWillLayoutSubviews。它完美地运行了大约半秒钟然后崩溃了,所以我再次将其改回viewDidLoad

标签: ios swift screen-orientation device-orientation


【解决方案1】:

您需要确保您的 SKView 包含您的 SKScene 设置为匹配它的包含框架的边界。您可以在 InterfaceBuilder 中或通过代码使用 Autolayout 来执行此操作。

【讨论】:

    【解决方案2】:

    正如 Good Doug 所说,尝试设置 skView 大小。

    在代码中,您可以像这样从 gameViewController 加载第一个场景。 (如果您不使用场景 sks 文件,则此方法有效)

        let skView = view as! SKView!
        let scene = StartScene(size: skView.bounds.size)
    
        skView.ignoresSiblingOrder = true
        scene.scaleMode = .AspectFill
    
        skView.presentScene(scene)
    

    另外,让游戏以纵向和横向运行似乎是一个非常糟糕的主意,它会给你带来很多我什至不会尝试的问题。

    【讨论】:

    • 我可以只在横向运行它,只是我无法上传它,因为它说 iPad 必须支持所有方向?
    • 你改变了目标的方向?您还需要转到 info.Plist,最后一个选项是 iPad 支持的方向。删除 2 个纵向或横向条目,如果您在 Targets 中更改方向,它们不会自动删除。
    • 就是这样!我需要添加的另一个info.Plist 条目是UIRequiresFullScreen 作为Bool 并将其设置为YES
    • 太棒了。我认为该选项默认是打开的。您也可以在“HideStatusBar”选项下方的目标-常规中打开/关闭此选项。
    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多