我的GameViewController.swift
和SKView一起使用。
在GameScene.swift
中,我创建了涵盖场景的UIView。
var overlayView = UIView(frame: UIScreen.main.bounds)
当我点击屏幕(touchesBegan
)overlayView.isHidden = true
时
以及touchesEnded
overlayView.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中,我的场景将保持不变。
答案 0 :(得分:0)
我使用了Notification Center
//GameScene.swift
override func sceneDidLoad() {
NotificationCenter.default.addObserver(forName: Notification.Name.init("close"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
self?.closeView()
}
...
}
//GameViewController.swift
override func viewWillDisappear(_ animated: Bool) {
NotificationCenter.default.post(name: Notification.Name.init("close"), object: nil)
...
}