从另一个文件中的SKScene删除UIView

时间:2018-07-20 14:04:27

标签: ios swift xcode uiview sprite-kit

我的GameViewController.swift和SKView一起使用。

GameScene.swift中,我创建了涵盖场景的UIView。 enter image description here

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中,我的场景将保持不变。

1 个答案:

答案 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)
...
}