zoukankan      html  css  js  c++  java
  • IOS 控件

    第一步:加入框架 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);
            }
        }
  • 相关阅读:
    专职DBA-MySQL体系结构与基本管理
    JSON
    MIME类型
    文件上传下载
    response常用的方法
    2020.11.27小记
    HTTP请求状态码
    1561. Maximum Number of Coins You Can Get
    1558. Minimum Numbers of Function Calls to Make Target Array
    1557. Minimum Number of Vertices to Reach All Nodes
  • 原文地址:https://www.cnblogs.com/ziyeSky/p/4138053.html
Copyright © 2011-2022 走看看