【问题标题】:Could not cast value of type 'UIView' to 'SKView' (removed Storyboard)无法将“UIView”类型的值转换为“SKView”(已删除情节提要)
【发布时间】:2021-06-26 14:12:10
【问题描述】:

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

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

This question 明确表示您必须将GameViewControllerview 自定义类设置为SKView,并解释如何使用情节提要。问题是我正在尝试以编程方式执行此操作,因为我删除了情节提要,但我不知道该怎么做。因为我习惯了 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 时,我得到的只是上面的错误。 请问有人可以说明如何在这些条件下以编程方式启动应用程序吗?

【问题讨论】:

    标签: ios swift sprite-kit skview


    【解决方案1】:

    这是你的错误所在:

    let skView = view as! SKView
    

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

    你应该这样做:

    let skView = SKView()
    view = skView
    

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

    【讨论】:

    • 工作,必须设置框架,因为设置 .zero 给了我一个空白屏幕。谢谢!
    【解决方案2】:

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

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

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

    【讨论】:

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