首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVCaptureSession和预览层没有填充整个屏幕

AVCaptureSession和预览层没有填充整个屏幕
EN

Stack Overflow用户
提问于 2017-02-20 15:21:03
回答 3查看 3.8K关注 0票数 5

因此,我尝试在我的应用程序中使用手机上的摄像头,而且我成功了,但不幸的是,当使用预览时,该层没有填充整个屏幕这是一张图片,给你看它是什么样子

这是我的密码:

代码语言:javascript
复制
if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) {
        self.previewLayer = previewLayer
        self.view.layer.addSublayer(self.previewLayer)
        self.previewLayer.frame = self.view.layer.frame
        captureSession.startRunning()

        let dataOutput = AVCaptureVideoDataOutput()
        dataOutput.videoSettings = [(kCVPixelBufferPixelFormatTypeKey as NSString):NSNumber(value:kCVPixelFormatType_32BGRA)]

        dataOutput.alwaysDiscardsLateVideoFrames = true

        if captureSession.canAddOutput(dataOutput) {
            captureSession.addOutput(dataOutput)
        }

        captureSession.commitConfiguration()


        let queue = DispatchQueue(label: "com.Osmo.captureQueue")
        dataOutput.setSampleBufferDelegate(self, queue: queue)
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-21 04:59:03

请试用以下方法:

代码语言:javascript
复制
if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) {
        self.previewLayer = previewLayer
        self.previewLayer.frame = self.view.bounds
        self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
        self.view.layer.insertSublayer(self.previewLayer, at: 0)
        captureSession.startRunning()

        let dataOutput = AVCaptureVideoDataOutput()
        dataOutput.videoSettings = [(kCVPixelBufferPixelFormatTypeKey as NSString):NSNumber(value:kCVPixelFormatType_32BGRA)]

        dataOutput.alwaysDiscardsLateVideoFrames = true

        if captureSession.canAddOutput(dataOutput) {
            captureSession.addOutput(dataOutput)
        }

        captureSession.commitConfiguration()


        let queue = DispatchQueue(label: "com.Osmo.captureQueue")
        dataOutput.setSampleBufferDelegate(self, queue: queue)
    }
票数 3
EN

Stack Overflow用户

发布于 2017-07-12 14:10:11

这可能是因为您试图从视图中设置预览层的框架,该框架具有自动布局约束。尝试将viewDidLayoutSubviews方法的重写添加到视图控制器:

代码语言:javascript
复制
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    self.previewLayer.frame = self.view.layer.bounds
}
票数 6
EN

Stack Overflow用户

发布于 2017-02-22 05:18:44

试试下面的代码:

代码语言:javascript
复制
 if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) {
                    previewLayer.bounds = view.bounds
                    previewLayer.position = CGPoint(x: view.bounds.midX, y: view.bounds.midY)   //CGPointMake(view.bounds.midX, view.bounds.midY)
                    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
                    let cameraPreview = UIView(frame: CGRect(x: 0.0, y: 0.0, width: view.bounds.width, height: view.bounds.height));
                    cameraPreview.tag = 44221007
                    cameraPreview.layer.addSublayer(previewLayer)
                    //cameraPreview.addGestureRecognizer(UITapGestureRecognizer(target: self, action:Selector(("saveToCamera:"))))
                    view.addSubview(cameraPreview)
                    self.view.sendSubview(toBack: cameraPreview);

                }

苹果文件:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42348237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档