removeFromSuperview不';t为UIView&x27工作;已添加到场景中

removeFromSuperview不';t为UIView&x27工作;已添加到场景中,uiview,swift,sprite-kit,skscene,Uiview,Swift,Sprite Kit,Skscene,我正在将UIView添加到场景的视图中。稍后,当我希望从其superview中删除该UIView时,使用UIView.removeFromSuperview的标准方法似乎不起作用。我应该如何做到这一点呢?以下是我添加UIView的方式: func addContainerView() { let containerRect = CGRectMake(400, 24, 600, 720) smallerView = UIView(frame: containerRect)

我正在将UIView添加到场景的视图中。稍后,当我希望从其superview中删除该UIView时,使用UIView.removeFromSuperview的标准方法似乎不起作用。我应该如何做到这一点呢?以下是我添加UIView的方式:

func addContainerView() {

    let containerRect = CGRectMake(400, 24, 600, 720)
    smallerView = UIView(frame: containerRect)
    smallerView.backgroundColor = UIColor.redColor()
    self.view.addSubview(smallerView)
}
以下是我试图删除它的方式:

func removeContainerView() {

    smallerView.removeFromSuperview()
}
这一切都发生在SKScene类中,所以这里的“self”指的是那个场景。
有什么想法吗?

首先,我想知道您使用的是哪个版本的swift

self.view
在1.2中是可选的 因此,如果您的目标是swift 1.2,您应该键入:
self.view?.addSubview()

我曾尝试在swift 1.2中制作一个简单的应用程序

class GameScene: SKScene {

  let subview = UIView()

  override func didMoveToView(view: SKView) {

    subview.frame = CGRectMake(0, 0, 100, 100)
    subview.backgroundColor = SKColor.orangeColor()
    self.view?.addSubview(subview)
  }

  override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    removeContainerView()
  }

  func removeContainerView() {
    subview.removeFromSuperview()
  }
}
class游戏场景:SKScene{
让子视图=UIView()
覆盖func didMoveToView(视图:SKView){
subview.frame=CGRectMake(0,0,100,100)
subview.backgroundColor=SKColor.orangeColor()
self.view?.addSubview(子视图)
}
覆盖func touchesBegined(触摸:设置,withEvent事件:UIEvent){
removeContainerView()
}
func removeContainerView(){
subview.removeFromSuperview()的子视图
}
}
上面的代码工作得很好。 我可以想出几个原因,你的观点没有被删除

  • 您确定实际调用了
    removeContainerView
    。试着做一个断点,看看它是否被调用
  • 如果您在代码中设置了SKView,则可能是设置错误
  • 您的子视图正在解除分配或其他
  • 要完全调试您的问题,我们需要看到更多的代码

    我们需要的是:

  • 子视图的声明
  • 调用removeContainerView()的所有函数

  • 最好是去上你的SKScene课

    你实际上把它添加到了self.view,也就是SKView,谢谢@AndreyGordeev,这是一个有趣的观察,一个非常真实的观察,但我不确定它是如何影响我的问题的。SKView继承了UIView,所以删除子视图也应该以同样的方式工作,对吗?这对我来说很好。一定是其他原因导致它留在屏幕上。我在SceneKit模板的viewDidLoad过程中添加了一个视图,并在handleTap方法中删除了它,一切都按预期进行。需要在主线程上删除。不,这仍然是一个问题,我还没有找到解决方案,您链接的问题对我没有帮助。在主线程上从SKVIEW场景中删除UIView没有帮助。请不要删除此项。谢谢