ios - 相机预览层不显示 Swift 4
问题描述
我正在创建一个 ViewController,我希望在 ViewController 的角落有一个稍微小的 UIView 来显示相机预览。我正在使用一个函数来做到这一点。但是,当我将小的 UIView 传递给函数时,相机预览没有显示出来。奇怪的是,如果我告诉函数在所有内容上显示预览self.view
都可以正常工作,并且我可以看到相机预览。出于这个原因,我认为问题在于我插入图层的方式或类似的东西。
这是我用来显示预览的功能...
func displayPreview(on view: UIView) throws {
guard let captureSession = self.captureSession, captureSession.isRunning else { throw CameraControllerError.captureSessionIsMissing }
self.previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
self.previewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
self.previewLayer?.connection?.videoOrientation = .portrait
view.layer.insertSublayer(self.previewLayer!, at: 0)
self.previewLayer?.frame = view.frame
}
我从另一个处理设置捕获会话和其他类似事情的函数内部调用此函数。
func configureCameraController() {
cameraController.prepare {(error) in
if let error = error {
print("ERROR")
print(error)
}else{
}
print("hello")
try! self.cameraController.displayPreview(on: self.mirrorView)
}
}
configureCameraController()
如何让相机预览层显示在较小的 UIView 上?
解决方案
您可以尝试添加以下内容
let rootLayer: CALayer = self.yourSmallerView.layer
rootLayer.masksToBounds = true
self.previewLayer.frame = rootLayer.bounds
rootLayer.addSublayer(self.previewLayer)
代替
view.layer.insertSublayer(self.previewLayer!, at: 0)
同时确保,yourSmallerView.contentMode = UIViewContentMode.scaleToFill
推荐阅读
- java - 如何从excel表中读取多个选项卡并转换为java spark中的每个Dataframe
- reactjs - 如何在 useEffect 而不是 onMouseOver 事件上添加 reactSpring?
- python - 循环遍历多个 Excel 文件以使用 pandas 修改和重写原始文件
- javascript - 第 3 方库导致 Webpack 抛出“严重依赖:依赖的请求是表达式”警告
- java - OpenCV 图像坐标到世界坐标的转换问题
- flutter - 如何从有状态小部件中获取参数
- git - 如何在窗口更改后保存提交消息
- laravel - Foreach 无法使用我的管理仪表板“未定义变量:用户”laravel
- ruby - 执行异步作业后,如何将实际作业包裹在基类中的 worker_monitor 周围?
- swift - XCUITest 到后台应用程序返回错误的 XCUIApplication.State