首先,我回顾了相关问题:
这些都没有为我提供明确的答案,我无法在我的主SKView
中展示其中包含ViewController
的控制器,例如:
import UIKit
import SceneKit
import SpriteKit
class ViewController: UIViewController {
var sceneView: SCNView!
var gameScene = GameScene()
var spriteScene: OverlayScene!
override func viewDidLoad() {
super.viewDidLoad()
sceneView = SCNView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))
sceneView.scene = gameScene
}
func showModal() {
let popupViewController = PopupViewController()
popupViewController.modalPresentationStyle = .popover
present(popupViewController, animated: true, completion: nil)
}
}
但问题似乎是在调用PopupViewController
时:
import UIKit
import SpriteKit
class PopupViewController:UIViewController {
var sceneView:SKView!
var spriteScene:PopupScene!
override func viewDidLoad() {
view.backgroundColor = UIColor.green
view.scene = spriteScene
super.viewDidLoad()
}
}
引发错误:
Could not cast value of type 'UIView' (0x1b48c69c8) to 'SKView' (0x1b3b254b0).
答案 0 :(得分:2)
查看您的答案,您似乎正在使用view
的主PopupViewController
来添加场景,而不是您声明的新sceneView
。解决这个问题的第一种方法是,如Nathan Hitchings在评论中所述,覆盖loadView
并设置self.view = sceneView
。另一个选项是打开storyboard或.xib并将主视图的类类型设置为SKView
,然后您可以完全删除sceneView
变量并使用self.view
。两者基本上都做同样的事情,但有两种不同的方式。确保在使用之前给出sceneView
一个值,因为它目前似乎保持未初始化状态。如果您需要我澄清任何事情,请告诉我。
第一个选项看起来像这样:
override func loadView() {
sceneView = SKView()
sceneView.backgroundColor = .white
self.view = sceneView
}