首先,我回顾了相关的问题:
所有这些都没有给我一个明确的答案,我无法从我的主ViewController中提供一个包含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).发布于 2018-01-19 19:37:46
查看您的答案,您似乎使用了您的PopupViewController的主sceneView来添加场景,而不是您声明的新sceneView。解决这个问题的第一种方法是,正如Nathan在评论中所说的那样,重写loadView并设置self.view = sceneView。另一个选项是打开故事板或.xib,并将主视图的类类型设置为SKView,然后可以完全删除sceneView变量并使用self.view。这两种方法本质上都是一样的,但有两种不同的方式。确保您在使用sceneView之前也给它一个值,因为目前它似乎没有初始化。如果你需要我澄清什么,请告诉我。
第一种选择如下所示:
override func loadView() {
sceneView = SKView()
sceneView.backgroundColor = .white
self.view = sceneView
}https://stackoverflow.com/questions/48348041
复制相似问题