• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

IOS控件-Swift集成IOS自带API扫描二维码

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

第一步:加入框架 AVFoundation.framework

目录选择 targets -> Build Phases -> Link Binary with Libraries 后,加入AVFoundation.framework即可

第二步:加入以下代码,并加入协议 AVCaptureMetadataOutputObjectsDelegate,

定义全局变量

var session: AVCaptureSession?;  
var previewLayer: AVCaptureVideoPreviewLayer?;  

在需要使用的地方 使用readQRCode()函数即可

func readQRCode() {
        
        //1.获取摄像头设备
        var device:AVCaptureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo);
        
        //2.设置输入
        var error: NSError?;
        var input: AVCaptureDeviceInput = AVCaptureDeviceInput.deviceInputWithDevice(device, error: &error) as AVCaptureDeviceInput;
        if (error != nil) {
            println("没有摄像头\(error?.localizedDescription)");
            return;
        }
        
        // 3. 设置输出(Metadata元数据)
        var output: AVCaptureMetadataOutput = AVCaptureMetadataOutput();
        // 3.1 设置输出的代理
        // 说明:使用主线程队列,相应比较同步,使用其他队列,相应不同步,容易让用户产生不好的体验
        output.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue());
        
        // 4. 拍摄会话
        var session1: AVCaptureSession = AVCaptureSession();
        session1.addInput(input);
        session1.addOutput(output);
        
        // 4.1 设置输出的格式
        // 提示:一定要先设置会话的输出为output之后,再指定输出的元数据类型!
        output.metadataObjectTypes = [AVMetadataObjectTypeQRCode];
        
        // 5. 设置预览图层(用来让用户能够看到扫描情况)
        var preview: AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer.layerWithSession(session1) as AVCaptureVideoPreviewLayer;
        // 5.1 设置preview图层的属性
        preview.videoGravity = AVLayerVideoGravityResizeAspectFill;
        // 5.2 设置preview图层的大小
        preview.frame = self.view.bounds;
        // 5.3 将图层添加到视图的图层
        self.view.layer.insertSublayer(preview, atIndex: 0);
        self.previewLayer = preview;
        
        // 6. 启动会话
        session1.startRunning();
        
        self.session = session1;
    }
    
    func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
        // 会频繁的扫描,调用代理方法
        // 1. 如果扫描完成,停止会话
        self.session?.stopRunning();
        // 2. 删除预览图层
        self.previewLayer?.removeFromSuperlayer();
        
        println(metadataObjects);
        // 3. 设置界面显示扫描结果
        
        if (metadataObjects.count > 0) {
            var obj:AVMetadataMachineReadableCodeObject = metadataObjects[0] as AVMetadataMachineReadableCodeObject;
            // 提示:如果需要对url或者名片等信息进行扫描,可以在此进行扩展!
            println("结果如下:" + obj.stringValue);
        }
    }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift 高级运算符发布时间:2022-07-13
下一篇:
Swiftjson字典转模型项目记录发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap