Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS设备旋转时视图和场景不正确_Ios_Swift_Skview - Fatal编程技术网

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

iOS设备旋转时视图和场景不正确,ios,swift,skview,Ios,Swift,Skview,当进行旋转时,我会得到一个不合适的视图/场景。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 = C

当进行旋转时,我会得到一个不合适的视图/场景。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)

  }
}
有人能告诉我我做错了什么吗

谢谢

试试这个

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)

        }
    }
试试这个

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
我更喜欢这样,因为大小将沿设备旋转动画设置动画

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)
}
Thx@AshokPolu
我更喜欢这样,因为大小将沿设备旋转动画设置动画

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)
}

旋转设备时,无需更新图幅大小,自动布局会自动调整图幅。如果要更新视图中的子视图边框,请使用“viewWillTransition”方法并相应地更改边框。无需更新视图边框大小,自动布局会在旋转设备时自动调整视图边框。如果要更新视图中的子视图框架,请使用“viewWillTransition”方法并相应地进行框架更改。