• 对于ios7扫描二维码功能的实现


    在ios7曾经,我们开发二维码扫描,或者生产都须要借助第三方的开源库进行开发。

    然后升级到ios7时,在passbook中苹果自带二维码扫描功能,并且扫描速度很快,秒杀一切第三方开源库。

    所以,我们做二维码的开发选用自带sdk优先级应该高于其它的库。


    说到二维码的开发。我们须要用到这两个对象。例如以下。

    @property (nonatomic,strong) AVCaptureSession *captureSession;

    @property (nonatomic,strong) AVCaptureVideoPreviewLayer *videoPreviewLayer;


    CaptureSession 这是个捕获会话,也就是说你能够用这个对象从输入设备捕获数据流。


    AVCaptureVideoPreviewLayer 能够通过输出设备展示被捕获的数据流。

    首先我们应该推断当前设备是否有捕获数据流的设备。

        AVCaptureDevice *captureDevice = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];

        AVCaptureDeviceInput *input = [AVCaptureDeviceInputdeviceInputWithDevice:captureDevice error:&error];

       if (!input) {

            NSLog(@"%@", [errorlocalizedDescription]);

            return NO;

        }

    如上,假设捕获到错误。直接返回。

    初始化一个CaptureSession对象

        _captureSession = [[AVCaptureSessionalloc] init];

    设置会话的输入设备

        [_captureSession addInput:input];


    相应输出

        AVCaptureMetadataOutput *captureMetadataOutput = [[AVCaptureMetadataOutputalloc] init];

        [_captureSession addOutput:captureMetadataOutput];


    创建一个队列

        dispatch_queue_t dispatchQueue;

        dispatchQueue = dispatch_queue_create("myQueue",NULL);

        [captureMetadataOutput setMetadataObjectsDelegate:selfqueue:dispatchQueue];

        [captureMetadataOutput setMetadataObjectTypes:[NSArrayarrayWithObject:AVMetadataObjectTypeQRCode]];


     降捕获的数据流展现出来

        _videoPreviewLayer = [[AVCaptureVideoPreviewLayeralloc] initWithSession:_captureSession];

        [_videoPreviewLayersetVideoGravity:AVLayerVideoGravityResizeAspectFill];

        [_videoPreviewLayer setFrame:_viewPreview.layer.bounds];

        [_viewPreview.layeraddSublayer:_videoPreviewLayer];

    開始捕获

        [_captureSession startRunning];



    获得的数据在

    AVCaptureMetadataOutputObjectsDelegate 唯一定义的方法中

    - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection;


    推断是否有数据。是否是二维码数据

        if (metadataObjects != nil && [metadataObjects count] > 0) {

            AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjectsobjectAtIndex:0];

            if ([[metadataObjtype] isEqualToString:AVMetadataObjectTypeQRCode]) {

    //获得扫描的数据。并结束扫描

                [selfperformSelectorOnMainThread:@selector(stopReading:)withObject:metadataObj.stringValuewaitUntilDone:NO];


    }


    }




    每天一小步,希望能帮助一些朋友。


    晚安啦。

    。。。









  • 相关阅读:
    2019适合年轻人创业的新项目有哪些?最有前景项目推荐
    在家创业办个不愁销路的小厂(四大项目介绍具体分析)
    倒卖什么赚钱?倒卖赚差价的生意[在闲鱼倒卖商品轻松月入过万]
    2020年的创业趋势是什么?未来适合什么行业钱赚的多?[附十六大趋势]
    python练习---博客登录(装饰器)
    python练习---博客登录(装饰器)
    11.25-11.27 配置防盗链,访问控制(Directory,FilesMatch)
    11.25-11.27 配置防盗链,访问控制(Directory,FilesMatch)
    11.25-11.27 配置防盗链,访问控制(Directory,FilesMatch)
    数据库事务的四大特性以及事务的隔离级别
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5221525.html
Copyright © 2020-2023  润新知