iOS设备旋转时视图和场景不正确
当进行旋转时,我会得到一个不合适的视图/场景。viewWillTransition方法如下所示: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
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”方法并相应地进行框架更改。