iOS 二维码扫描

来源:互联网 发布:php与java工资 编辑:程序博客网 时间:2024/05/29 11:55

原生二维码扫描

个人是比较支持用原生二维码扫描的,这里也就仅仅以原生二维码扫面为范例

1.原生扫描用到的几个类

@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;

2.在viewDidLoad里创建它们

// Device_device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];// Input_input = [AVCaptureDeviceInputdeviceInputWithDevice:self.deviceerror:nil];// Output_output = [[AVCaptureMetadataOutputalloc]init];[_outputsetMetadataObjectsDelegate:selfqueue:dispatch_get_main_queue()];// Session_session = [[AVCaptureSessionalloc]init];[_sessionsetSessionPreset:AVCaptureSessionPresetHigh];

连接输入和输出

if ([_sessioncanAddInput:self.input]){    [_sessionaddInput:self.input];}if ([_sessioncanAddOutput:self.output]){    [_sessionaddOutput:self.output];}

设置条码类型

_output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode];

添加扫描画面

_preview =[AVCaptureVideoPreviewLayerlayerWithSession:_session];_preview.videoGravity =AVLayerVideoGravityResizeAspectFill;_preview.frame =self.view.layer.bounds;[self.view.layerinsertSublayer:_previewatIndex:0];

开始扫描

[_sessionstartRunning];

最后实现协议AVCaptureMetadataOutputObjectsDelegate
- (void)captureOutput:(AVCaptureOutput )captureOutput didOutputMetadataObjects:(NSArray )metadataObjects fromConnection:(AVCaptureConnection *)connection
{
NSString *stringValue;
if ([metadataObjectscount] >0){
//停止扫描
[_sessionstopRunning];
AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjectsobjectAtIndex:0];
stringValue = metadataObject.stringValue;
}
}