【问题标题】:Could not cast value of type 'UIView' to 'SCNView'无法将“UIView”类型的值转换为“SCNView”
【发布时间】:2016-05-21 06:34:18
【问题描述】:

应用程序构建良好,直到我开始向情节提要添加按钮,然后出现上述错误。它停在我的 GameViewController 中的这行代码处。

let scnView = self.view as! SCNView

情节提要本身的自定义类设置为 GameViewController(没有 SCNView 选项)。 GameViewController 本身继承自 UIViewController。 我正在使用 Xcode7.2。

【问题讨论】:

    标签: ios scenekit


    【解决方案1】:

    确保在文件顶部也导入 SceneKit。

    import SceneKit
    

    打开“Main.storyboard”文件。选择 ViewController -> View 转到“Identity Inspector”并将 Class 字段更改为 SCNView。 SceneKit Help

    【讨论】:

    • 您好,感谢您的帮助。我已经有import Scenekit 代码在那里,如果我尝试将类字段更改为 SCNView Xcode 不断将其更改回 GameViewController (如前所述 SCNView 不在下拉菜单中)我开始怀疑它是否是一个错误xcode 7.2.
    • 更改视图的类,而不是视图控制器
    • 不要更改 ViewController 的类。更改 ViewController 中的 View 的类。
    【解决方案2】:

    如果您在没有情节提要的情况下以编程方式设置所有这些内容,请确保执行以下步骤:

    1. 常规 -> 部署信息 -> 清除主界面部分,留空。
    2. 进入AppDelegate.swift并分配窗口的rootViewController

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        window = UIWindow()
        let gameViewController = GameViewController()
        window?.rootViewController = gameViewController
        window?.makeKeyAndVisible()
        return true
    }
    1. 转到 GameViewController,这里不要将 GameViewController 的视图投射到 SCNView,而是创建 SCNView 实例并添加类似 subView:

    let scnView = SCNView(frame: view.frame)
    view.addSubview(scnView)

    【讨论】:

    • 谢谢!只做了第三步,它对我有用
    【解决方案3】:

    当我删除一个 UIButton 时,同样的事情发生在我身上,它也删除了 UIView。所以添加一个 UIView 并将类更改为 SCNView

    【讨论】:

      【解决方案4】:

      如果您以编程方式执行此操作,请添加以下代码:

          override func loadView() {
              //sort of like changes type of self.view from UIView to SCNView
              self.view = SCNView()
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-27
        • 1970-01-01
        • 2018-05-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多