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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于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];


}


}




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


晚安啦。

。。。









以上是关于对于ios7扫描二维码功能的实现的主要内容,如果未能解决你的问题,请参考以下文章

iOS7后 苹果 二维码生成与扫描

iOS开发-二维码扫描和应用跳转

使用IOS7原生API进行二维码条形码的扫描

ios7原生扫码

Android实战——Zxing实现二维码扫描

iOS二维码的生成与扫描