首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何自定义AVcapture大小

如何自定义AVcapture大小
EN

Stack Overflow用户
提问于 2016-09-02 02:22:44
回答 1查看 1.5K关注 0票数 1

我需要捕获我的条形码,但这是我的代码捕获是全屏。如何自定义尺寸或固定为小尺寸。请让我的想法或代码为定制尺寸这个谢谢。

这是我的代码捕获全屏。

代码语言:javascript
复制
import UIKit
import AVFoundation

protocol BarcodeDelegate {
    func barcodeReaded(barcode: String)
}


class barcodeCapViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {

    var delegate: BarcodeDelegate?
    var captureSession: AVCaptureSession!
    var code: String?


    override func viewDidLoad() {
        super.viewDidLoad()

        self.captureSession = AVCaptureSession();

        let videoCaptureDevice: AVCaptureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)

        do {

            let videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)

            if self.captureSession.canAddInput(videoInput) {
                self.captureSession.addInput(videoInput)
            } else {
                print("Could not add video input")
            }

            let metadataOutput = AVCaptureMetadataOutput()
            if self.captureSession.canAddOutput(metadataOutput) {
                self.captureSession.addOutput(metadataOutput)

                metadataOutput.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
                metadataOutput.metadataObjectTypes = [AVMetadataObjectTypeQRCode, AVMetadataObjectTypeEAN13Code]
            } else {
                print("Could not add metadata output")
            }

            let previewLayer = AVCaptureVideoPreviewLayer(session: self.captureSession)
            previewLayer.frame = self.view.layer.bounds
            self.view.layer .addSublayer(previewLayer)
            self.captureSession.startRunning()
        } catch let error as NSError {
            print("Error while creating vide input device: \(error.localizedDescription)")
        }

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
        for metadata in metadataObjects {
            let readableObject = metadata as! AVMetadataMachineReadableCodeObject
            let code = readableObject.stringValue
            if !code.isEmpty {
                self.captureSession.stopRunning()
                self.dismissViewControllerAnimated(true, completion: nil)
                self.delegate?.barcodeReaded(code)
            }
        }
    }

}

当我添加CGRectMake(20,40,200,50) show this

添加CGRectMake(20,40,500,100) show this

我不知道为什么宽度和高度不能按照代码加起来。

EN

回答 1

Stack Overflow用户

发布于 2016-09-02 05:24:52

更改AVCaptureVideoPreviewLayer的帧大小

代码语言:javascript
复制
let previewLayer = AVCaptureVideoPreviewLayer(session: self.captureSession)
previewLayer.frame = CGRectMake(10, 20, 100, 50)    // something else!

如果使用自动布局,则可能不想处理CALayer帧,因此应创建一个UIView子类,将AVCaptureVideoPreviewLayer添加到子类中,然后在layoutSubviews中设置图层的frame

代码语言:javascript
复制
override func layoutSubviews() {
    super.layoutSubviews()
    self.previewLayer.frame = self.frame
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39278476

复制
相关文章

相似问题

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