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

iOS开发——iOS7(及以后版本) SDK自带二维码(含条形码)扫码、二维码生成

2015-03-22 20:24 435 查看
  现在很多APP都涉及了二维码扫码功能,这个功能简单实用,很多情况下用户乐于使用,现在本文带来iOS7自带二维码扫码的教程,也包括扫条形码,足以满足简单的扫码要求,而且避免使用第三方的繁琐。

  后期项目中需要生成二维码,我在git上找到一个很方便使用的轻量级开源库,推荐给有需要的朋友:https://github.com/moqod/ios-qr-code-encoder

  下面介绍如何使用iOS7后SDK自带扫码API。

  首先,要引入AVFoundation框架:

#import <AVFoundation/AVFoundation.h>


  然后完成扫码需要用的相关类的对象:

@property (strong,nonatomic)AVCaptureDevice *device;
@property (strong,nonatomic)AVCaptureDeviceInput *input;
@property (strong,nonatomic)AVCaptureMetadataOutput *output;
@property (strong,nonatomic)AVCaptureSession *session;
@property (strong,nonatomic)AVCaptureVideoPreviewLayer *previewLayer;


  初始化:

// Device
_device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
// Input
NSError *error = nil;
_input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:&error];
if (error) {
NSLog(@"初始化输入设备失败");
}
// Output
_output = [[AVCaptureMetadataOutput alloc] init];
[_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
// Session
_session = [[AVCaptureSession alloc] init];
[_session setSessionPreset:AVCaptureSessionPresetHigh];
// 添加输入输出
if ([_session canAddInput:self.input])
{
[_session addInput:self.input];
}
if ([_session canAddOutput:self.output])
{
[_session addOutput:self.output];
}
// 条码类型 AVMetadataObjectTypeQRCode 即二维码,如果需要扫描条形码,就要在这个数组里添加枚举,command点二维码枚举进去,就会看见其他的需要的条码类型,例如UPC,code39,code128等,酌情使用
_output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode];

// Preview
_previewLayer =[AVCaptureVideoPreviewLayer layerWithSession:self.session];
_previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
_previewLayer.frame = self.view.bounds;
[self.view.layer insertSublayer:self.previewLayer atIndex:0];
32     // 开始扫码
33     [_session startRunning];


  实现代理AVCaptureMetadataOutputObjectsDelegate:

#pragma mark - AVCaptureMetadataOutputObjectsDelegate methods
// 扫到码之后,会通过这个代理方法告知扫码结果
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {

NSString *stringValue = nil;
if ([metadataObjects count] >0)
{
AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex:0];
stringValue = metadataObject.stringValue;
}
// 扫码成功,停止扫码会话层活动
[_session stopRunning];

NSLog(@"%@",stringValue);
}


  以上就iOS7以后SDK原生扫码,使用比较简单。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: