uiview - removeFromSuperview 不适用于添加到 SKScene 的 UIView

标签 uiview swift sprite-kit skscene

我正在将 UIView 添加到 SKScene 的 View 中。后来,当我想从它的 super View 中删除那个 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 中是可选的 因此你应该输入:self.view?.addSubview() 如果你的目标是 swift 1.2

我试过用swift 1.2做一个简单的app

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. 你的 subview 正在被释放或什么的

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

我们需要的是:

  1. 声明你的 subview
  2. 调用 removeContainerView() 的所有函数

更好的方法是 pastebin你的 SKScene 类。

关于uiview - removeFromSuperview 不适用于添加到 SKScene 的 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25694873/

相关文章:

ios - 如何在 iOS 应用程序中编辑 'projectile' 的速度

swift - 如何为我的场景添加背景? SpriteKit swift 4

ios - 点击按钮即可推送新 View

ios - 如何在 UIImage 中绘制具有此阴影效果的矩形?

ios - 动画子类无法正确应用于我的 View 动画

xcode - IBOutlet 变量名被 ( ` ) 包围?

iOS FBSDKLogin 按钮文本淡入

ios - 如何使用 UserDefaults 保存 UIColor?

iphone - 在 UITableView 上延迟重新加载数据

ios - 如何使用 Swift 从 Parse 中的 _User 类获取 currentUserInfo