import UIKit import AVFoundation class ScannerViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate, UIAlertViewDelegate{ var scanRectView:UIView! var device:AVCaptureDevice! var input:AVCaptureDeviceInput! var output:AVCaptureMetadataOutput! var session:AVCaptureSession! var preview:AVCaptureVideoPreviewLayer! override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(true) fromCamera(); } override func viewDidLoad() { super.viewDidLoad() } //通过摄像头扫描 func fromCamera() { do{ self.device = AVCaptureDevice.default(for: AVMediaType.video) self.input = try AVCaptureDeviceInput(device: device) self.output = AVCaptureMetadataOutput() output.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) self.session = AVCaptureSession() if UIScreen.main.bounds.size.height<500 { self.session.sessionPreset = AVCaptureSession.Preset.vga640x480 }else{ self.session.sessionPreset = AVCaptureSession.Preset.high } self.session.addInput(self.input) self.session.addOutput(self.output) self.output.metadataObjectTypes = [AVMetadataObject.ObjectType.qr] //计算中间可探测区域 let windowSize = UIScreen.main.bounds.size let scanSize = CGSize(width:windowSize.width*3/4, height:windowSize.width*3/4) var scanRect = CGRect(x:(windowSize.width-scanSize.width)/2, y:(windowSize.height-scanSize.height)/2, width:scanSize.width, height:scanSize.height) //计算rectOfInterest 注意x,y交换位置 scanRect = CGRect(x:scanRect.origin.y/windowSize.height, y:scanRect.origin.x/windowSize.width, width:scanRect.size.height/windowSize.height, height:scanRect.size.width/windowSize.width); //设置可探测区域 self.output.rectOfInterest = scanRect self.preview = AVCaptureVideoPreviewLayer(session:self.session) self.preview.videoGravity = AVLayerVideoGravity.resizeAspectFill self.preview.frame = UIScreen.main.bounds self.view.layer.insertSublayer(self.preview, at:0) //添加中间的探测区域绿框 self.scanRectView = UIView(); self.view.addSubview(self.scanRectView) self.scanRectView.frame = CGRect(x:0, y:0, width:scanSize.width, height:scanSize.height); self.scanRectView.center = CGPoint( x:UIScreen.main.bounds.midX, y:UIScreen.main.bounds.midY) self.scanRectView.layer.borderColor = UIColor.green.cgColor self.scanRectView.layer.borderWidth = 1; //开始捕获 self.session.startRunning() }catch _ { //打印错误消息 let alertController = UIAlertController(title: "提醒", message: "请在iPhone的\"设置-隐私-相机\"选项中,允许本程序访问您的相机", preferredStyle: .alert) let cancelAction = UIAlertAction(title: "确定", style: .cancel, handler: nil) alertController.addAction(cancelAction) self.present(alertController, animated: true, completion: nil) } } //摄像头捕获 func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) { var stringValue:String? if metadataObjects.count > 0 { let metadataObject = metadataObjects[0] as! AVMetadataMachineReadableCodeObject stringValue = metadataObject.stringValue if stringValue != nil{ self.session.stopRunning() } } self.session.stopRunning() //输出结果 let alertController = UIAlertController(title: "二维码", message: stringValue,preferredStyle: .alert) let okAction = UIAlertAction(title: "确定", style: .default, handler: { action in //继续扫描 self.session.startRunning() }) alertController.addAction(okAction) self.present(alertController, animated: true, completion: nil) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
相关推荐
iOS原生二维码扫描,识别图片中的二维码信息。(赠送扫描动画,手电筒?功能让你夜里轻松扫描二维码)
RHScan - 实现二维码扫描功能,含各种UI、手势放大缩小镜头、仿微信扫码放大
swift-ios原生的二维码和条形码扫描.zip
现在越来越多的App添加了一个扫码的功能,方便而且很实用,但是目前对弈iOS来说有些比较知名的库(比如ZXingObjC)库都比较大,而实际上,在iOS 7.0之后系统在AVFoundation框架中就已经实现了对于二维码扫描和生成的...
二维码的生成和使用,包括去相册识别照片中的二维码和扫描二维码等
IOS应用源码之swift编写的二维码扫描demo.zip
QRCode 二维码创建扫描
IQEngUICamera:自定义相机、二维码扫描、人脸追踪
相机扫描二维码or长按图片识别二维码 系统定位 FMDB(目前出现一些问题正在修改) 键盘高度 ...后续还有本地播放音频、语音识别、模糊搜索
XBQRCodeHandler:支持扫描区域的二维码扫描
用于生成二维码制作和扫描
这是本人学习swift开发语言时重写的一个二维码扫描Demo,界面已经自定义。很适合swift新手参考,实现逻辑与ios7的完全相同,系统自带的库扫码效率很高。
帮助用Swift开发二维码的同学们,快速集成。觉得不错的可以关注我,不定期上传给你代码。
一个基于iOS系统API的二维码扫描小框架,继承QRCodeViewController即可
swift版利用AVFoundation进行二维码扫描
FanQRCodeScan(iOS8 )原生二维码条形码扫描和生成
ios原生的二维码和条形码扫描
SSJImage-Scan 图片压缩和二维码生成 or 扫描二维码
SWQRCode swift 版本,高仿微信扫一扫功能
使用swift coreImage框架实现 二维码扫描 从相册二维码相片扫描 以及 二维码生成与保存