苹果开发 笔记(72)二维码

二维码是ios实用的程序,ios7后期版本官方已经提供了相关的API来完成二维码的扫描工作。 今天参考和查阅了对方的资料来学习二维码扫描的做法。真机调试下, 这个架构主要是由AVFoundation框架提供的API来完成。

以下是github 里面一位开发者的demo。
https://github.com/reesun1130/SYQRCodeDemo

真机调试下可以可以看到相应的功能。除了官方自带的二维码还有github 另外一个提供了类库,这个可以兼容到6.0 使用。

注意点 设置二维码的扫描区域里面有几个点注意 ,可以参考这篇文章,开发者提及到 设置的区域是一个比例数,设置的时候需要取反按比例来弄。这个和我们思维多少有点不一样。宽和高都需要反过来。这文章可以给到我们一些提示信息。 iOS 原生二维码扫描(可限制扫描区域)

AVFoundation 默认情况下 设置的区域是全屏的,为了仿效和体现,二维码都会在窗口方面设计一番。好像扫描区域小一点。扫描的滚动条需要循环运动。这样子搞一个二维码的扫描工序还是需要几个步骤。

1.黑色的区域创建
2.中间区域的边框设计,四个角度的展示,扫描线的循环动画,声音的显示或者震动的设置。
3.文字显示
4. 工具栏的切换交互

看起来还是很好玩的,不过还是需要设置很多,苹果这个API 还是显得有点罗嗦。但是功能可以顺利完成。。
除此外还有ZBarSDK 作为二维码的解决。这个库可以兼容到ios 6.0 所以AVFoundation 里面二维码支持 则只能在7.0 以上才能有作为。

编程开始

系统涉及的二维码需要涉及的类有如下:
点击查看 关于 AVCaptureDevice的官方文档

AVCaptureDevice

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

AVCaptureDeviceInput

  NSError *error = nil;
  AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];

AVCaptureMetadataOutput

    AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc]init]; [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; 

AVCaptureSession

 AVCaptureSession *session  = [[AVCaptureSession alloc]init]; [session addInput:input]; [session addOutput:output]; [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];

AVCaptureVideoPreviewLayer

 AVCaptureVideoPreviewLayer *preview = [AVCaptureVideoPreviewLayer layerWithSession:session];
 [preview setVideoGravity:AVLayerVideoGravityResizeAspectFill];
 [preview setFrame:self.view.layer.bounds];
 [self.view.layer insertSublayer:preview atIndex:0];

你可能感兴趣的:(苹果开发 笔记(72)二维码)