我的SKView有GameViewController.swift
。
在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中,我的场景不会改变。 最佳答案
我用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)
...
}
关于ios - 从另一个文件中的SKScene删除UIView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51444318/