无法将“UIView”类型的值转换为“SKView”已删除 Storyboard

问题描述

我是第一次使用 SpriteKit,但在应用启动时遇到问题:

无法将“UIView”(0x2038a8848) 类型的值转换为“SKView”(0x2039f2658)。

This question 明确指出您必须将 GameViewControllerview 自定义类设置为 SKView 并说明如何使用 Storyboard 进行操作。问题是我正在尝试以编程方式执行此操作,因为我删除了 Storyboard,但我不知道该怎么做。因为我已经习惯了 UIKit,所以这从来没有给我带来任何问题。

所以,在 AppDelegate 中我说:

func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    
    let window = UIWindow(frame: UIScreen.main.bounds)
    window.rootViewController = GameViewController()
    window.makeKeyAndVisible()
    self.window = window
    return true
}

GameViewController中:

override func viewDidLoad() {
    super.viewDidLoad()
    
    let skView = view as! SKView
    skView.ignoresSiblingOrder = true

    gameScene = GameScene(size: view.frame.size)
    gameScene!.scaleMode = .aspectFill
    gameScene!.gameSceneDelegate = self
    
    show(gameScene!,animated: true)
    
}

当我尝试将 VC view 向下转换为 SKView 时,我得到的只是上面的错误。 任何人都可以说明如何在这些条件下以编程方式启动应用程序吗?

解决方法

这就是你的错误所在:

let skView = view as! SKView

您假设 self.viewSKView 的实例,但它不是。它是一个 UIView,就像在故事板中一样,默认情况下根视图具有 UIView 类。

你应该这样做:

let skView = SKView()
view = skView

将根视图设置为 SKView 的实例。

,

故事板中的视图控制器视图在那里设置了一个 SKView 类名,当您删除它时,您会滚动到通常的 vc 视图,因此将其添加到您的 GameViewController

override func loadView() {
    self.view = SKView() 
}

提示:loadView 是您应该在没有关联的故事板/xib 时初始化视图控制器视图的地方

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...