我有一个背景中有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也是全黑的。
有什么建议吗?