【发布时间】:2018-07-20 14:04:26
【问题描述】:
我有我的GameViewController.swift 和 SKView。
在GameScene.swift 中,我创建了覆盖我的场景的 UIView。
var overlayView = UIView(frame: UIScreen.main.bounds)
当我点击屏幕时 (touchesBegan) overlayView.isHidden = true
当touchesEndedoverlayView.isHidden = false。
但我有一个问题。当我需要更改某些内容(在另一个 ViewController 中)并返回场景时,当我点击屏幕时,overlayView 不会隐藏。 (新的overlayView,在场景重新加载后出现,覆盖了之前的overlayView。而之前的overlayView“覆盖”了我的场景)
//GameScene.swift
var overlayView = UIView(frame: UIScreen.main.bounds)
func closeView() {
overlayView.removeFromSuperview()
print("hidden")
}
//GameViewController.swift
@IBOutlet var tandmScene: SKView!
override func viewWillAppear(_ animated: Bool) {
if let scene = SKScene(fileNamed: "TandM") {
scene.size = self.view.frame.size
scene.scaleMode = .resizeFill
tandmScene.presentScene(scene)
}
tandmScene.ignoresSiblingOrder = true
tandmScene.showsFPS = true
}
override func viewWillDisappear(_ animated: Bool) {
GameScene().closeView()
}
我的overlayView.removeFromSuperview() 不工作。如果我将if let scene = ... 放入 viewDidLoad 我的场景不会改变。
【问题讨论】:
-
在
viewWillDisappear中将GameScene().closeView()更改为self.closeView()以解决一个问题。 -
@Kamran closeView() 是 GameScene 方法,而不是 GameViewController
-
好的,那么
GameViewController中的GameScene引用在哪里。用那个。当您执行GameScene()时,它会创建一个GameScene的新对象,因此它不会调用为添加覆盖视图而创建的另一个对象的closeView。 -
@Kamran 我需要在哪里创建参考?如果
let tandm = TandMScene()是一个类变量我有libc++abi.dylib: terminating with uncaught exception of type NSException错误
标签: ios swift xcode uiview sprite-kit