如果我把它放在trackMotion中,SceneKit快照会崩溃,但不会发生 - 计时问题?

时间:2017-01-31 17:14:46

标签: swift3 scenekit avcapture

我有一个背景中有SceneKit的视图,前景中有一个AVCaptureVideoPreviewLayer。我希望在相机上可以看到半透明版本的背景。所以基于这里的旧线程,我添加了一个UIImageView并将其置于一个动作中:

    let background = sceneView.snapshot()
    let cameraview = background.cgImage!.cropping(to: overlayView.bounds)
    overlayView.image = UIImage.init(cgImage: cameraview!, scale: 1, orientation: .upMirrored)

这很有效。问题是我必须跟踪手机的运动,以便网格与现实世界保持一致。所以......

func trackMotion(motion: CMDeviceMotion?, error: Error?) {
    guard let motion = motion else { return }
    guard (self.camera) != nil else { return }
    self.camera.orientation = motion.gaze(atOrientation: UIApplication.shared.statusBarOrientation)

    let background = sceneView.snapshot()
    let cameraview = background.cgImage!.cropping(to: overlayView.bounds)
    overlayView.image = UIImage.init(cgImage: cameraview!, scale: 1, orientation: .upMirrored)
}

sceneView.snapshot上的EXE_BAD_ACCESS。我再次注意到,如果我只是将完全相同的代码放在一个动作中,它就能完美地运行。我怀疑这是某种时间问题,因为如果我在那里放置断点它不会崩溃,相反,即使我继续,SceneKit也是全黑的。

有什么建议吗?

0 个答案:

没有答案