iOS 二維碼掃描 原生版
阿新 • • 發佈:2018-11-25
iOS掃描有很多非常成熟的第三方應用,從iOS7以後開始支援原生掃描二維碼,而且效率非常高,整合也很簡單.下面我們來寫下原生掃描方法.直接上圖.swfit 版本.
var device: AVCaptureDevice! var input: AVCaptureDeviceInput! var output: AVCaptureMetadataOutput! var session: AVCaptureSession! var preView: AVCaptureVideoPreviewLayer!
上面就是需要的幾個主要的類.
下面是配置方法:
func configDeviceVideo() -> Void { device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo); input = try? AVCaptureDeviceInput(device: device); output = AVCaptureMetadataOutput(); output.setMetadataObjectsDelegate(self, queue: .main); session = AVCaptureSession(); if session.canSetSessionPreset(AVCaptureSessionPresetHigh){ session.sessionPreset = AVCaptureSessionPresetHigh; } if session.canAddInput(input) { session.addInput(input); } if session.canAddOutput(output){ session.addOutput(output); } output.metadataObjectTypes = output.availableMetadataObjectTypes; preView = AVCaptureVideoPreviewLayer(session: session); preView.videoGravity = AVLayerVideoGravityResizeAspectFill; preView.frame = self.view.bounds; self.view.layer.addSublayer(preView); }
不過有兩點需要特別注意一下,
1.output.MetadataObjectsDelegate代理需要實現.
2.output.metadataObjectTypes = output.availableMetadataObjectTypes
這個方法必須寫在session.addOutput(output);的後面.否則會出錯.
最後一個方法:
session.startRunning();
最後有一句重要的話.要匯入AVFoundation這個框架.