removeFromSuperview 对于添加到 SKScene 的 UIView 不起作用

问题描述 投票:0回答:2

我正在将 UIView 添加到 SKScene 的视图中。 后来,当我希望从其超级视图中删除该 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”指的是该场景。 有什么想法吗?

uiview swift sprite-kit skscene
2个回答
1
投票

首先我想知道你使用的是哪个版本的 swift。

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

我尝试在 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()
  }
}

上面的代码运行得很好。 我可以想到您的视图没有被删除的几个原因

  1. 您确定确实调用了
    removeContainerView
    吗?尝试下个断点看看是否调用了
  2. 如果您在代码中设置了 SKView,则可能存在设置错误。
  3. 你的子视图正在被释放或者其他什么事情

为了完全调试您的问题,我们需要查看更多代码。

我们需要的是:

  1. 您的子视图的声明
  2. 所有调用removeContainerView()的函数

更好的是pastebin你的SKScene类。


0
投票

确保您没有创建多个containerRect对象;否则,你不确定你指的是哪一个。 做这样的事情:

 func addContainerView() {
   if !isContainerRectExist { 
     let containerRect = CGRectMake(400, 24, 600, 720)
     isContainerRectExist = true

     smallerView = UIView(frame: containerRect)
     smallerView.backgroundColor = UIColor.redColor()
     self.view.addSubview(smallerView)
  }
}

在顶部声明 isContainerRectExist var 并将其初始化为 false。

© www.soinside.com 2019 - 2024. All rights reserved.