无法将“UIView”类型的值转换为“SKView”(已删除情节提要)
Posted
技术标签:
【中文标题】无法将“UIView”类型的值转换为“SKView”(已删除情节提要)【英文标题】:Could not cast value of type 'UIView' to 'SKView' (removed Storyboard) 【发布时间】:2021-06-26 14:12:10 【问题描述】:我是第一次使用 SpriteKit,但在应用启动时遇到了问题:
无法将“UIView”(0x2038a8848)类型的值转换为“SKView”(0x2039f2658)。
This question 明确表示您必须将GameViewController
的view
自定义类设置为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
时,我得到的只是上面的错误。
请问有人可以说明如何在这些条件下以编程方式启动应用程序吗?
【问题讨论】:
【参考方案1】:这是你的错误所在:
let skView = view as! SKView
您假设self.view
是SKView
的一个实例,但事实并非如此。这是一个UIView
,就像在故事板中一样,默认情况下,根视图具有类UIView
。
你应该这样做:
let skView = SKView()
view = skView
将根视图设置为SKView
的实例。
【讨论】:
工作,必须设置框架,因为设置 .zero 给了我一个空白屏幕。谢谢!【参考方案2】:情节提要中的视图控制器视图有一个 SKView
类名设置在那里,当您删除它时,您会滚动到通常的 vc 视图,因此将其添加到您的 GameViewController
override func loadView()
self.view = SKView()
提示:
loadView
是在没有关联的故事板/xib 时应该初始化视图控制器视图的位置
【讨论】:
以上是关于无法将“UIView”类型的值转换为“SKView”(已删除情节提要)的主要内容,如果未能解决你的问题,请参考以下文章
无法将“UIView”(0x112484eb0)类型的值转换为“SKView”(0x111646718)
无法将类型“(SwipeableTabBarController).Type”的值转换为预期的参数类型“UIView”
无法将类型“(MapViewController).Type”(又名“MapViewController.Type”)的值转换为预期的参数类型“UIView”