iOS7 AVFoundation 二维码扫瞄
2013-10-24 11:20
435 查看
iOS7,AVFoundation中现在已经内置支持一维和二维码的扫瞄,iOS6及之前的想要扫瞄二维码,还是需要添加第三方库ZXing和ZBar。
ZBar生成二维码:/article/10756664.html
先添加AVFoundation.framework
#import <AVFoundation/AVFoundation.h>
@interface QRcodeViewController :UIViewController<AVCaptureMetadataOutputObjectsDelegate>
@property (strong,nonatomic)AVCaptureDevice *device;
@property (strong,nonatomic)AVCaptureDeviceInput *input;
@property (strong,nonatomic)AVCaptureMetadataOutput *output;
@property (strong,nonatomic)AVCaptureSession *session;
@property (strong,nonatomic)AVCaptureVideoPreviewLayer
*preview;
@end
- (void)setupCamera
{
// Device
self.device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];
// Input
self.input = [AVCaptureDeviceInputdeviceInputWithDevice:self.deviceerror:nil];
// Output
self.output = [[AVCaptureMetadataOutputalloc]init];
[self.outputsetMetadataObjectsDelegate:selfqueue:dispatch_get_main_queue()];
// Session
self.session = [[AVCaptureSessionalloc]init];
[self.sessionsetSessionPreset:AVCaptureSessionPresetHigh];
if ([self.sessioncanAddInput:self.input])
{
[self.sessionaddInput:self.input];
}
if ([self.sessioncanAddOutput:self.output])
{
[self.sessionaddOutput:self.output];
}
//
条码类型
self.output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode];
// Preview
self.preview = [AVCaptureVideoPreviewLayerlayerWithSession:self.session];
self.preview.videoGravity =AVLayerVideoGravityResizeAspectFill;
self.preview.frame =CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height);
[self.view.layeraddSublayer:self.preview];
// Start
[self.sessionstartRunning];
}
条码类型有如下几种:
扫瞄到二维码之后,会调用delegate
#pragma mark AVCaptureMetadataOutputObjectsDelegate
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray
*)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
NSString *stringValue;
if ([metadataObjectscount] >0) {
AVMetadataMachineReadableCodeObject *metadataObject = [metadataObjectsobjectAtIndex:0];
stringValue = metadataObject.stringValue;
}
[_sessionstopRunning];
[selfdismissViewControllerAnimated:YEScompletion:^{
UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:nil
message:stringValue
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil,nil];
[alertshow];
}];
}
这个委托方法里面的字符串stringValue就是二维码的内容
ZBar生成二维码:/article/10756664.html
先添加AVFoundation.framework
#import <AVFoundation/AVFoundation.h>
@interface QRcodeViewController :UIViewController<AVCaptureMetadataOutputObjectsDelegate>
@property (strong,nonatomic)AVCaptureDevice *device;
@property (strong,nonatomic)AVCaptureDeviceInput *input;
@property (strong,nonatomic)AVCaptureMetadataOutput *output;
@property (strong,nonatomic)AVCaptureSession *session;
@property (strong,nonatomic)AVCaptureVideoPreviewLayer
*preview;
@end
- (void)setupCamera
{
// Device
self.device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];
// Input
self.input = [AVCaptureDeviceInputdeviceInputWithDevice:self.deviceerror:nil];
// Output
self.output = [[AVCaptureMetadataOutputalloc]init];
[self.outputsetMetadataObjectsDelegate:selfqueue:dispatch_get_main_queue()];
// Session
self.session = [[AVCaptureSessionalloc]init];
[self.sessionsetSessionPreset:AVCaptureSessionPresetHigh];
if ([self.sessioncanAddInput:self.input])
{
[self.sessionaddInput:self.input];
}
if ([self.sessioncanAddOutput:self.output])
{
[self.sessionaddOutput:self.output];
}
//
条码类型
self.output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode];
// Preview
self.preview = [AVCaptureVideoPreviewLayerlayerWithSession:self.session];
self.preview.videoGravity =AVLayerVideoGravityResizeAspectFill;
self.preview.frame =CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height);
[self.view.layeraddSublayer:self.preview];
// Start
[self.sessionstartRunning];
}
条码类型有如下几种:
1 2 3 4 5 6 7 8 9 10 | AVMetadataObjectTypeUPCECode AVMetadataObjectTypeCode39Code AVMetadataObjectTypeCode39Mod43Code AVMetadataObjectTypeEAN13Code AVMetadataObjectTypeEAN8Code AVMetadataObjectTypeCode93Code AVMetadataObjectTypeCode128Code AVMetadataObjectTypePDF417Code AVMetadataObjectTypeQRCode AVMetadataObjectTypeAztecCode |
#pragma mark AVCaptureMetadataOutputObjectsDelegate
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray
*)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
NSString *stringValue;
if ([metadataObjectscount] >0) {
AVMetadataMachineReadableCodeObject *metadataObject = [metadataObjectsobjectAtIndex:0];
stringValue = metadataObject.stringValue;
}
[_sessionstopRunning];
[selfdismissViewControllerAnimated:YEScompletion:^{
UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:nil
message:stringValue
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil,nil];
[alertshow];
}];
}
这个委托方法里面的字符串stringValue就是二维码的内容
相关文章推荐
- iOS7 AVFoundation 二维码扫瞄
- iOS7 AVFoundation 二维码扫瞄
- 若只支持IOS7 可用AVFouner 和系统自带API实现二维码扫描功能
- iOS 利用 AVFoundation 实现二维码/条形码扫描
- ios7新增api实现扫描二维码
- ios 二维码生成 扫瞄
- iOS--iOS7摄像头识别二维码功能
- iOS 原生AVFoundation 限制区域二维码扫描
- ios7扫描二维码重复回调的问题
- iOS7自带扫描二维码、条形码功能实现
- iOS 二维码相关功能(ios7后自带接口)
- 对于ios7扫描二维码功能的实现
- ios使用AVFoundation读取二维码的方法
- AVFoundation框架实现二维码的扫描、二维码的生成
- iOS 使用AVFoundation 扫描二维码并限定扫描区域(带代码生成蒙版)
- iOS7二维码的使用
- 使用 IOS7 原生API进行二维码条形码的扫描
- iOS7自带扫描二维码、条形码功能实现
- IOS 对于ios7扫描二维码功能的实现
- IOS 使用AVFoundation 扫描条形码、二维码等