从另一个文件中的 SKScene 中删除 UIView
Posted
技术标签:
【中文标题】从另一个文件中的 SKScene 中删除 UIView【英文标题】:Remove UIView from SKScene in another file 【发布时间】:2018-07-20 14:04:26 【问题描述】:我有我的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 我的场景不会改变。
【问题讨论】:
在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
错误
【参考方案1】:
我用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)
...
【讨论】:
以上是关于从另一个文件中的 SKScene 中删除 UIView的主要内容,如果未能解决你的问题,请参考以下文章
UIGestureRecognizer,从另一个类调用选择器
从另一个方法中删除 NSManagedObjectContext 中的对象