使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