解雇VC后SceneKit崩溃

时间:2017-12-01 00:53:29

标签: ios swift scenekit

项目:https://github.com/cgranthovey/SCNViewTest

该应用有2个VC 当我转到第二个VC时,我使用下面的代码设置了SCNScene。

override func viewDidLoad() {
    super.viewDidLoad()
    mySCNView.autoenablesDefaultLighting = true
    mySCNView.allowsCameraControl = true
    mySCNView.backgroundColor = UIColor.black
}

override func viewWillAppear(_ animated: Bool) {
   let pyramid = SCNNode()
   pyramid.geometry = SCNPyramid(width: 1, height: 2, length: 1)
   pyramid.geometry?.firstMaterial?.diffuse.contents = UIColor.purple
   pyramid.geometry?.firstMaterial?.diffuse.contents = UIColor.white
   pyramid.position = SCNVector3(0, 0, 0)
   pyramid.eulerAngles = SCNVector3(x: 0, y: 10, z: 180 * Float.pi)
   let shapeScene = SCNScene()
   shapeScene.rootNode.addChildNode(pyramid)
   mySCNView.scene = shapeScene
}

如果我然后轻弹图像并让它旋转,当它旋转时我按下后退按钮

@IBAction func backBtnPress(_ sender: AnyObject){
    self.navigationController?.popViewController(animated: true)
}

我遇到了崩溃。

Thread 1: EXC_BAD_ACCESS (code=1, address=0x101f2210)

enter image description here

但是,如果我等待旋转停止然后按下后退按钮,则不会发生崩溃。任何想法发生了什么或如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

根据我的建议,在展开堆栈跟踪后,您会看到一条有趣的信息。具体来说,导致崩溃的代码似乎与SCNView的摄像机控制器的惯性系统有关。

在退出场景的视图控制器之前尝试停止惯性似乎可以缓解我的简短测试中的问题。根据我对iOS 11的体验,这次崩溃只发生在我的模拟器上,但我正在使用模态演示。我认为这可能是SCNCameraController中的一个错误。

@IBAction func backBtnPress(_ sender: AnyObject){

    chariotView.defaultCameraController.stopInertia()

    self.navigationController?.popViewController(animated: true)
}