无法将类型 'UIView' 的值转换为 'SKView'(已删除 Storyboard)
Could not cast value of type 'UIView' to 'SKView' (removed Storyboard)
我是第一次使用 SpriteKit,我在应用启动时遇到问题:
Could not cast value of type 'UIView' (0x2038a8848) to 'SKView' (0x2039f2658).
This question 明确表示您必须将 GameViewController
的 view
自定义 class 设置为 SKView
并说明如何使用 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.view
是 SKView
的实例,但事实并非如此。它是一个 UIView
,就像在情节提要中一样,默认情况下根视图具有 class UIView
.
你应该这样做:
let skView = SKView()
view = skView
将根视图设置为 SKView
的实例。
情节提要中的视图控制器视图有一个 SKView
class 名称设置在那里,当您删除它时,您将滚动到通常的 vc 视图,因此将其添加到您的 GameViewController
override func loadView() {
self.view = SKView()
}
Tip : loadView
is where you should init the view controller's view when there is no associated storyboard/xib
我是第一次使用 SpriteKit,我在应用启动时遇到问题:
Could not cast value of type 'UIView' (0x2038a8848) to 'SKView' (0x2039f2658).
This question 明确表示您必须将 GameViewController
的 view
自定义 class 设置为 SKView
并说明如何使用 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.view
是 SKView
的实例,但事实并非如此。它是一个 UIView
,就像在情节提要中一样,默认情况下根视图具有 class UIView
.
你应该这样做:
let skView = SKView()
view = skView
将根视图设置为 SKView
的实例。
情节提要中的视图控制器视图有一个 SKView
class 名称设置在那里,当您删除它时,您将滚动到通常的 vc 视图,因此将其添加到您的 GameViewController
override func loadView() {
self.view = SKView()
}
Tip :
loadView
is where you should init the view controller's view when there is no associated storyboard/xib