您的位置:首页 > 移动开发 > IOS开发

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];
}

条码类型有如下几种:
1
2
3
4
5
6
7
8
9
10

AVMetadataObjectTypeUPCECode
AVMetadataObjectTypeCode39Code
AVMetadataObjectTypeCode39Mod43Code
AVMetadataObjectTypeEAN13Code
AVMetadataObjectTypeEAN8Code
AVMetadataObjectTypeCode93Code
AVMetadataObjectTypeCode128Code
AVMetadataObjectTypePDF417Code
AVMetadataObjectTypeQRCode
AVMetadataObjectTypeAztecCode

扫瞄到二维码之后,会调用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就是二维码的内容
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: