对于ios7扫描二维码功能的实现
2014-06-05 23:20
417 查看
在ios7以前,我们开发二维码扫描,或者生产都需要借助第三方的开源库进行开发。
然后升级到ios7时,在passbook中苹果自带二维码扫描功能,而且扫描速度非常快,秒杀一切第三方开源库。所以,我们做二维码的开发选用自带sdk优先级应该高于其他的库。
说到二维码的开发,我们需要用到这两个对象。如下。。
@property (nonatomic,strong)
***CaptureSession *captureSession;
@property (nonatomic,strong)
***CaptureVideoPreviewLayer *videoPreviewLayer;
CaptureSession 这是个捕获会话,也就是说你可以用这个对象从输入设备捕获数据流。
***CaptureVideoPreviewLayer 可以通过输出设备展示被捕获的数据流。
首先我们应该判断当前设备是否有捕获数据流的设备。
***CaptureDevice *captureDevice = [***CaptureDevicedefaultDeviceWithMediaType:***MediaTypeVideo];
***CaptureDeviceInput *input = [***CaptureDeviceInputdeviceInputWithDevice:captureDevice
error:&error];
if (!input) {
NSLog(@"%@", [errorlocalizedDescription]);
return NO;
}
如上,如果捕获到错误,直接返回。
初始化一个CaptureSession对象
_captureSession = [[***CaptureSessionalloc]
init];
设置会话的输入设备
[_captureSession
addInput:input];
对应输出
***CaptureMetadataOutput *captureMetadataOutput = [[***CaptureMetadataOutputalloc]
init];
[_captureSession addOutput:captureMetadataOutput];
创建一个队列
dispatch_queue_t dispatchQueue;
dispatchQueue = dispatch_queue_create("myQueue",NULL);
[captureMetadataOutput setMetadataObjectsDelegate:selfqueue:dispatchQueue];
[captureMetadataOutput setMetadataObjectTypes:[NSArrayarrayWithObject:***MetadataObjectTypeQRCode]];
降捕获的数据流展现出来
_videoPreviewLayer = [[***CaptureVideoPreviewLayeralloc]
initWithSession:_captureSession];
[_videoPreviewLayersetVideoGravity:***LayerVideoGravityResizeAspectFill];
[_videoPreviewLayer
setFrame:_viewPreview.layer.bounds];
[_viewPreview.layeraddSublayer:_videoPreviewLayer];
开始捕获
[_captureSession
startRunning];
获得的数据在
***CaptureMetadataOutputObjectsDelegate 唯一定义的方法中
- (void)captureOutput:(***CaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(***CaptureConnection *)connection;
判断是否有数据,是否是二维码数据
if (metadataObjects !=
nil && [metadataObjects count] >
0) {
***MetadataMachineReadableCodeObject *metadataObj = [metadataObjectsobjectAtIndex:0];
if ([[metadataObjtype]
isEqualToString:***MetadataObjectTypeQRCode]) {
//获得扫描的数据,并结束扫描
[selfperformSelectorOnMainThread:@selector(stopReading:)withObject:metadataObj.stringValuewaitUntilDone:NO];
}
}
每天一小步,希望能帮助一些朋友。
晚安啦。。。。
然后升级到ios7时,在passbook中苹果自带二维码扫描功能,而且扫描速度非常快,秒杀一切第三方开源库。所以,我们做二维码的开发选用自带sdk优先级应该高于其他的库。
说到二维码的开发,我们需要用到这两个对象。如下。。
@property (nonatomic,strong)
***CaptureSession *captureSession;
@property (nonatomic,strong)
***CaptureVideoPreviewLayer *videoPreviewLayer;
CaptureSession 这是个捕获会话,也就是说你可以用这个对象从输入设备捕获数据流。
***CaptureVideoPreviewLayer 可以通过输出设备展示被捕获的数据流。
首先我们应该判断当前设备是否有捕获数据流的设备。
***CaptureDevice *captureDevice = [***CaptureDevicedefaultDeviceWithMediaType:***MediaTypeVideo];
***CaptureDeviceInput *input = [***CaptureDeviceInputdeviceInputWithDevice:captureDevice
error:&error];
if (!input) {
NSLog(@"%@", [errorlocalizedDescription]);
return NO;
}
如上,如果捕获到错误,直接返回。
初始化一个CaptureSession对象
_captureSession = [[***CaptureSessionalloc]
init];
设置会话的输入设备
[_captureSession
addInput:input];
对应输出
***CaptureMetadataOutput *captureMetadataOutput = [[***CaptureMetadataOutputalloc]
init];
[_captureSession addOutput:captureMetadataOutput];
创建一个队列
dispatch_queue_t dispatchQueue;
dispatchQueue = dispatch_queue_create("myQueue",NULL);
[captureMetadataOutput setMetadataObjectsDelegate:selfqueue:dispatchQueue];
[captureMetadataOutput setMetadataObjectTypes:[NSArrayarrayWithObject:***MetadataObjectTypeQRCode]];
降捕获的数据流展现出来
_videoPreviewLayer = [[***CaptureVideoPreviewLayeralloc]
initWithSession:_captureSession];
[_videoPreviewLayersetVideoGravity:***LayerVideoGravityResizeAspectFill];
[_videoPreviewLayer
setFrame:_viewPreview.layer.bounds];
[_viewPreview.layeraddSublayer:_videoPreviewLayer];
开始捕获
[_captureSession
startRunning];
获得的数据在
***CaptureMetadataOutputObjectsDelegate 唯一定义的方法中
- (void)captureOutput:(***CaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(***CaptureConnection *)connection;
判断是否有数据,是否是二维码数据
if (metadataObjects !=
nil && [metadataObjects count] >
0) {
***MetadataMachineReadableCodeObject *metadataObj = [metadataObjectsobjectAtIndex:0];
if ([[metadataObjtype]
isEqualToString:***MetadataObjectTypeQRCode]) {
//获得扫描的数据,并结束扫描
[selfperformSelectorOnMainThread:@selector(stopReading:)withObject:metadataObj.stringValuewaitUntilDone:NO];
}
}
每天一小步,希望能帮助一些朋友。
晚安啦。。。。
相关文章推荐
- 对于ios7扫描二维码功能的实现
- IOS 对于ios7扫描二维码功能的实现
- 若只支持IOS7 可用AVFouner 和系统自带API实现二维码扫描功能
- iOS7自带扫描二维码、条形码功能实现
- iOS7自带扫描二维码、条形码功能实现
- swift 实现二维码扫描功能
- iOS开发之扫描二维码功能的实现
- qt for ios扫描二维码功能实现
- ios7新增api实现扫描二维码
- Android平台生成二维码并实现扫描 & 识别功能
- iOS 原生态API实现二维码的扫描功能
- iOS之使用ZbarSDK实现扫描二维码以及条形码功能
- IOS7实现扫描二维码
- [IPHONE] iOS使用ZbarSDK实现扫描二维码以及条形码功能
- 关于扫描二维码下载app功能实现方法
- AVA整合HTML5实现扫描二维码功能项目源码
- phonegap的二维码扫描功能的实现
- [置顶] android开发之集成zxing,二维码,以及扫描二维码的功能实现。带源代码下载
- 随机字符串解决大问题之腾讯网如何实现手机扫描二维码登录qq功能的
- 仿微信的二维码登录功能:客户端登录后,通过扫描web端页面上的二维码,实现同一用户在web端的登录