我的SKView有GameViewController.swift

GameScene.swift中,我创建了涵盖场景的UIView。
ios - 从另一个文件中的SKScene删除UIView-LMLPHP

var overlayView = UIView(frame: UIScreen.main.bounds)
当我点击屏幕(touchesBeganoverlayView.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/

10-14 13:26