iOS场景大小在变化?

时间:2018-04-12 02:23:13

标签: ios xcode uiview sprite-kit skscene

我有一个用SpriteKit构建的游戏,我正在尝试为iPhone X调整它的大小。

这是我的初始设置代码:

override func viewDidLoad() {
    super.viewDidLoad()
    authenticateLocalPlayer()
    var isiphonex = false
    if UIDevice().userInterfaceIdiom == .phone {
        if UIScreen.main.nativeBounds.height == 2436{
            isiphonex=true
        }
    }

    let skView = self.view as! SKView
    if(isiphonex){
        if #available(iOS 11.0, *) {
            print("ios11")

            skView.frame = CGRect(x: 39 , y: 0, width: 667, height: skView.safeAreaLayoutGuide.layoutFrame.height)

        } else {
            // Fallback on earlier versions
        }



    }

    let startScene = StartScene(size:skView.bounds.size)


    startScene.anchorPoint = CGPoint(x: 0.0892857, y: 0)
    skView.showsFPS = false
    skView.showsNodeCount = false

    skView.ignoresSiblingOrder = true
    startScene.scaleMode = .resizeFill

    skView.presentScene(startScene)
}

然后当场景加载时我这样做:

override func didMove(to view: SKView) {
    print(scene?.size.width)
    print(view.bounds.size.width)
    print(scene!.view!.bounds.size.width)
}

他们都打印667

但是当我试图在触摸过程中改变场景并执行此操作时:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    print(scene!.size.width)
    print(scene!.view!.bounds.size.width)

}

他们都打印812。

为什么会这样,我怎样才能让它留在667?

2 个答案:

答案 0 :(得分:0)

  1. 尝试在viewWillAppear或viewDidAppear中设置框架。
  2. 检查是否应用了覆盖您正在设置的帧的任何约束。

答案 1 :(得分:0)

显然,改变ViewController的主要场景的大小只会导致它恢复到原始大小。为了解决这个问题,我创建了一个新的SKView,并将其作为子视图添加到ViewController的主视图中。然后我在新的SKView中展示了我所有的SKSCenes