关于iOS二维码
关于iOS扫描和生成二维码,多数人用的是第三方zxing或者zbar,不可否认,这俩个框架是非常方便的,但是你知不知道apple早就为我们封装好了关于二维码的一些操作,并且速度以及内存占用量都比第三方优秀许多,废话不多说,上代码吧。
一扫描二维码
用的是AV框架的相机操作,共分为5步。首先应该获取相机的权限:
//判断相机是否能够使用
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if(status == AVAuthorizationStatusAuthorized)
{
// authorized
} else if(status == AVAuthorizationStatusDenied)
{
// denied
return ;
} else if(status == AVAuthorizationStatusRestricted)
{
// restricted
} else if(status == AVAuthorizationStatusNotDetermined)
{
// not determined
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
if(granted){
} else {
return;
}
}];
}
获取到相机权限之后进行第二步:创建会话和添加设备
AVCaptureSession * session = [[AVCaptureSession alloc]init];
AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
第三步:创建input和output,并加入会话
AVCaptureDeviceInput *input = [[AVCaptureDeviceInput alloc]initWithDevice:device error:nil];
[session addInput:input];
AVCaptureMetadataOutput *outPut = [[AVCaptureMetadataOutput alloc]init];
[outPut setMetadataObjectsDelegate:self queue:dispatch_get_main_queue() ];
[session addOutput:outPut];
[outPut setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
第四步。开始扫描
AVCaptureVideoPreviewLayer *videoLayer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:session];
videoLayer.frame = self.view.bounds;
videoLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;//填充模式
[self.view.layer addSublayer:videoLayer];
[session startRunning];
第五步 output的代理获得扫描的信息
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
NSLog(@"%@",[metadataObjects lastObject].stringValue);
}
ps:原先不是多么了解二维码,阅读并借鉴了博客园一位仁兄的分享,并归纳了一下。
浙公网安备 33010602011771号