swift 二維碼掃描

//MARK: 初始化二維碼掃描器
    func initQRCodeScaner(){
        // 獲取 AVCaptureDevice 實例
        _captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
        // 初始化輸入流
        do{
            try _inputStream = AVCaptureDeviceInput(device: _captureDevice!)
        }catch{
            print("初始化輸入流 with device 失敗")
        }
        if _inputStream == nil{
            return
        }
        _ctr._isScaning = true
        // 創(chuàng)建會話
        _captureSession = AVCaptureSession()
        _captureSession?.addInput(_inputStream)
        // 初始化輸出流
        _captureMetadataOutput = AVCaptureMetadataOutput()
        //設置區(qū)域
        //CGRectMake(y的起點/屏幕的高,x的起點/屏幕的寬,掃描的區(qū)域的高/屏幕的高,掃描的區(qū)域的寬/屏幕的寬)
        _captureMetadataOutput?.rectOfInterest = CGRect(x: _scanRect!.origin.y/kScreenHeight, y: _scanRect!.origin.x/kScreenWidth, width: _scanRect!.height / kScreenHeight, height: _scanRect!.width / kScreenWidth)
        // 添加輸出流
        _captureSession?.addOutput(_captureMetadataOutput)
        // 創(chuàng)建dispatch queue.
        let dispatchQueue = dispatch_queue_create(kScanQRCodeQueueName, nil)
        _captureMetadataOutput?.setMetadataObjectsDelegate(self, queue: dispatchQueue)
        // 設置元數(shù)據(jù)類型 AVMetadataObjectTypeQRCode
        let objArray = NSArray(objects: AVMetadataObjectTypeQRCode)
        _captureMetadataOutput?.metadataObjectTypes = objArray as [AnyObject]
        // 創(chuàng)建輸出對象
        _videoPreviewLayer = AVCaptureVideoPreviewLayer(session: _captureSession)
        _videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
        _videoPreviewLayer?.frame = self.view.bounds
        self.view.layer.insertSublayer(_videoPreviewLayer!, atIndex: 0)

    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容