使QRReader应用迅速
今天,我将向您展示如何通过简单的一些步骤来制作吸引人且实用的iPhone QRReader应用程序。
第一个导入库,
导入AVFoundation
现在,使用摄像头拍摄一个视图,您可以看到扫描,并将IBOutlet设置为:
@IBOutlet弱var viewPreview:UIView!
采取一个UIButton来执行操作开始和停止扫描:
@IBOutlet弱var btnStartStop:UIButton!
我们需要一个布尔变量,因此我们将其视为:
var isReading:Bool = false
最后,使用UILabel来显示结果/输出:
@IBOutlet弱var lblString:UILabel!
设置代表以供查看,例如:
ViewController类:UIViewController, AVCaptureMetadataOutputObjectsDelegate {
在ViewDidLoad上编写以下代码以进行初始设置:
viewPreview.layer.cornerRadius = 5; btnStartStop.layer.cornerRadius = 5; captureSession = nil;
lblString.text =“条形码说明...”;
我们必须在按钮操作上编写以下代码:
@IBAction函数func buttonHandlerStart(_ sender:Any){如果!isReading {
如果(self.startReading()){
btnStartStop.setTitle(“ Stop”,用于:.normal)
lblString.text =“正在扫描QR码...”}}
else {stopReading()btnStartStop.setTitle(“ Start”,for:.normal)}
isReading =!isReading
}
现在编写我们在按钮操作上使用的这两个自定义方法:
func startReading()-> Bool {
让captureDevice = AVCaptureDevice.default(for:.video)
do {让输入=尝试AVCaptureDeviceInput(设备:captureDevice!)captureSession = AVCaptureSession()captureSession?.addInput(input)}将let错误捕获为NSError {print(error)
返回假
} videoPreviewLayer = AVCaptureVideoPreviewLayer(session:captureSession!)videoPreviewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill videoPreviewLayer.frame = viewPreview.layer.bounds viewPreview.layer.addSublayer(videoPreviewLayer)让captureMetadataOutput = AVCaptureCaptureMetadataOutput() = captureMetadataOutput.availableMetadataObjectTypes captureMetadataOutput.setMetadataObjectsDelegate(self,queue:DispatchQueue.main)captureSession?.startRunning()返回true
}
func stopReading(){
captureSession?.stopRunning()captureSession =无videoPreviewLayer.removeFromSuperlayer()
}
最后,我们编写了如下的委托方法:
func metadataOutput(_输出:AVCaptureMetadataOutput,didOutput metadataObjects:[AVMetadataObject],来自连接:AVCaptureConnection){
用于元数据对象中的数据{
让metaData =数据为! AVMetadataObject print(metadataObjects.description)让transfromed = videoPreviewLayer.transformedMetadataObject(for:metaData)as? AVMetadataMachineReadableCodeObject,如果让unwrapped = transfromed {print(unwrapped.stringValue)lblString.text = unwrapped.stringValue btnStartStop.setTitle(“ Start”,for:.normal)//self.perform(#selector(stopReading),在:DispatchQueue.main ,其中:nil,waitUntilDone:false)self.stopReading()
isReading =假
}
}
}
运行并确保您仅在真实设备上测试应用程序。
下载源代码:https://github.com/javedmultani16/QRReader