Swift3 如果我将SceneKit快照放在trackMotion中,它会崩溃,但在其他情况下不会崩溃-时间问题?

Swift3 如果我将SceneKit快照放在trackMotion中,它会崩溃,但在其他情况下不会崩溃-时间问题?,swift3,scenekit,avcapture,Swift3,Scenekit,Avcapture,我有一个背景为SceneKit,前景为AVCaptureVideoPreviewLayer的视图。我想要一个半透明版本的背景在相机上是可见的。因此,基于这里的一个旧线程,我添加了一个UIImageView,并将其放在一个操作中: let background = sceneView.snapshot() let cameraview = background.cgImage!.cropping(to: overlayView.bounds) overlayView.ima

我有一个背景为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执行错误的访问。我再次注意到,如果我在一个动作中使用完全相同的代码,它就可以完美地工作。我怀疑这是某种时间问题,因为如果我在那里放置断点,它不会崩溃,但是相反,即使在我继续之后,场景仍然是黑色的


有什么建议吗?

在不同的线程上调用了
trackMotion
吗?这可能是一个问题。我认为实际上GC和SK在不同的线程中。