简体   繁体   English

iOS设备旋转时视图和场景不正确

[英]view and scene not correct on iOS device rotation

When doing a rotation, I'm getting an out of place view/scene. 旋转时,出现异位视图/场景。 The viewWillTransition method is as below: viewWillTransition方法如下:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
{
  let newRect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
  let newSize = CGSize(width: size.width, height: size.height)

  self.view.frame = newRect

  let skView = self.view as! SKView      
  if let sceneNode = skView.scene as! GameScene? {      
    sceneNode.size = newSize

    sceneNode.position = CGPoint(x: self.view.frame.midX, y: self.view.frame.midY)

  }
}

Can someone please let me know what I'm doing wrong? 有人可以让我知道我在做什么错吗?

Thank you 谢谢

Try this, 尝试这个,

override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        let skView = self.view as! SKView
        if let sceneNode = skView.scene as! GameScene? {
            sceneNode.size = self.view.frame.size

            sceneNode.position = CGPoint(x: self.view.frame.midX, y: self.view.frame.midY)

        }
    }

Thx @AshokPolu! 谢谢@AshokPolu!
I prefer this because the size will be animated along device rotate animation. 我更喜欢这样做,因为尺寸会随着设备旋转动画而变化。

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    coordinator.animateAlongsideTransition(in: self.view, animation: { (_) in
        if let skView = self.view as? SKView, let scene = skView.scene as? GameScene {
            scene.size = self.view.frame.size
            scene.position = CGPoint(x: self.view.frame.midX, y: self.view.frame.midY)
        }
    }, completion: nil)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM