IOS 对于ios7扫描二维码功能的实现
2014-09-03 09:44
731 查看
在ios7以前,我们开发二维码扫描,或者生产都需要借助第三方的开源库进行开发。
然后升级到ios7时,在passbook中苹果自带二维码扫描功能,而且扫描速度非常快,秒杀一切第三方开源库。所以,我们做二维码的开发选用自带sdk优先级应该高于其他的库。
说到二维码的开发,我们需要用到这两个对象。如下。。
@property (nonatomic,strong) AVCaptureSession *captureSession;
@property (nonatomic,strong) AVCaptureVideoPreviewLayer *videoPreviewLayer;
CaptureSession 这是个捕获会话,也就是说你可以用这个对象从输入设备捕获数据流。
AVCaptureVideoPreviewLayer 可以通过输出设备展示被捕获的数据流。
首先我们应该判断当前设备是否有捕获数据流的设备。
然后升级到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 原生态API实现二维码的扫描功能
- iOS7自带扫描二维码、条形码功能实现
- 使用ZbarSDK实现扫描二维码以及条形码功能(iOS)
- iOS 原生实现扫描二维码和条形码功能限制扫描区域
- iOS 二维码扫描相关功能实现
- qt for ios扫描二维码功能实现
- IOS上原生代码实现二维码扫描功能
- iOS实现二维码的扫描功能
- 若只支持IOS7 可用AVFouner 和系统自带API实现二维码扫描功能
- iOS之使用ZbarSDK实现扫描二维码以及条形码功能
- iOS7自带扫描二维码、条形码功能实现
- iOS开发之扫描二维码功能的实现
- [IPHONE] iOS使用ZbarSDK实现扫描二维码以及条形码功能
- 用ZBar实现IOS上二维码扫描功能
- 仿微信的二维码登录功能:客户端登录后,通过扫描web端页面上的二维码,实现同一用户在web端的登录
- ios7下二维码功能的实现
- 在iOS上实现二维码功能
- iOS 应用实现条形码扫描功能的方法