Skip to content

生成二维码、识别二维码和扫描二维码

Notifications You must be signed in to change notification settings

hao1208hao/ScanAndQRDemo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ScanAndQRDemo

调用 1、引用

#import "QRTool.h"
#import "ScanQR.h"

2、生成二维码

    CGFloat w = 200;
    /** 第一个参数:生成二维的内容
        第二个参数:二维码图片的尺寸
    */
    UIImage* img =[QRTool createQRImgWithContent:@"http://www.baidu.com" imgSize:w];

3、扫描二维码

  ScanQR *scan = [[ScanQR alloc]init];    
    scan.scanDelegate = self;
    [self.navigationController pushViewController:scan animated:YES];

3.1 扫描结果获取

 -(void)getScanResult:(NSString *)scanResult{
    UIAlertView* alert =[[UIAlertView alloc]initWithTitle:@"扫描结果" message:scanResult delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
    [alert show];
}

生成二维码关键部分

 CIFilter* filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    [filter setDefaults];
    
    NSData* data = [qrContent dataUsingEncoding:NSUTF8StringEncoding];
    [filter setValue:data forKeyPath:@"inputMessage"];
    CIImage* outImg = [filter outputImage];

判断相机授权状态

 AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    if (status == AVAuthorizationStatusAuthorized) {
        //授权
        
    }else if(status == AVAuthorizationStatusNotDetermined){
        //未决定
    }else{
       //拒绝----弹窗提示跳转设置权限
       
       //if ([[[UIDevice currentDevice]systemVersion]floatValue]>=8.0) {
       //   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
       //}else{
       //    NSURL*url=[NSURL URLWithString:@"prefs:root=Privacy"];
       //    [[UIApplication sharedApplication] openURL:url];
       //}
       
    }

创健扫描部分

 AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    
    // Input
    AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
    
    // Output
    AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];
    [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    
    // Session
    _session = [[AVCaptureSession alloc]init];
    [_session setSessionPreset:AVCaptureSessionPresetHigh];
    if ([_session canAddInput:input])
    {
        [_session addInput:input];
    }
    
    if ([_session canAddOutput:output])
    {
        [_session addOutput:output];
    }
    
    
    // 3.1.设置输入元数据的类型(类型是二维码数据)
    [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
    
    // Preview
    AVCaptureVideoPreviewLayer *preview =[AVCaptureVideoPreviewLayer layerWithSession:_session];
    preview.videoGravity =AVLayerVideoGravityResizeAspectFill;
    preview.frame =self.view.layer.bounds;
    [self.view.layer insertSublayer:preview atIndex:0];
    
    [_session startRunning];

扫描结果部分

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
    if (metadataObjects.count > 0) {
        // 停止扫描
        [self.session stopRunning];
        [self.qrView stopAnimation];

        //震动提示
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
        AVMetadataMachineReadableCodeObject *object = [metadataObjects lastObject];
        if ([self.scanDelegate respondsToSelector:@selector(getScanResult:)]) {
            [self.scanDelegate getScanResult:result];
        }
         [self.navigationController popViewControllerAnimated:YES];
       // NSLog(@"扫描结果是:%@",object.stringValue);
    } else {
        NSLog(@"没有扫描到数据");
    }
}

About

生成二维码、识别二维码和扫描二维码

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published