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

iOS系统自带二维码的生成以及扫描

2016-07-29 09:46 471 查看
1.二维码生成
   
// 1.实例化二维码滤镜

    CIFilter *filter = [CIFilterfilterWithName:@"CIQRCodeGenerator"];

   

    // 2.恢复滤镜的默认属性(因为滤镜有可能保存上一次的属性)

    [filter setDefaults];

   

    // 3.将字符串转换成NSData

    NSString *str =@"这是一句话";

    NSData *data = [strdataUsingEncoding:NSUTF8StringEncoding];

   

    // 4.通过KVC设置滤镜传入data,将来滤镜就知道要通过传入的数据生成二维码

    [filter setValue:dataforKey:@"inputMessage"];

   

    // 5.获得滤镜输出的图像(生成二维码)

    CIImage *outputImage = [filteroutputImage];

    UIImage *image = [UIImageimageWithCIImage:outputImage];

   

    // 6.设置生成好的二维码到imageView上,全局创建的imageView,自己随意设置

    self.imageView.image
= image;
2.二维码扫描

//1.实例化拍摄设备

    AVCaptureDevice *device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];

    //2.设置输入设备

    AVCaptureDeviceInput *input =[AVCaptureDeviceInputdeviceInputWithDevice:deviceerror:nil];

   

    //3 设置元数据输出

    //3.1 实例化拍摄元数据输出

    AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutputalloc]init];

    //3.2 设置输出数据代理

    [output setMetadataObjectsDelegate:selfqueue:dispatch_get_main_queue()];

   

    // 4 添加拍摄会话

    self.session = [[AVCaptureSessionalloc]init];

    // 4.1 添加会话输入

    [self.sessionaddInput:input];

    // 4.2 添加会话输出

    [self.sessionaddOutput:output];

    // 4.3 设置输出类型,需要将元数据输出添加到会话后,才能指定元数据类型,否则会报错

    [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];

   

    // 5.视频预览图层

    // 5.1实例化预览图层,传递_session是为了告诉将来图层显示什么内容

    self.Layer = [AVCaptureVideoPreviewLayerlayerWithSession:_session];

    _Layer.videoGravity =AVLayerVideoGravityResizeAspectFill;

    _Layer.frame =CGRectMake(30,100,300,300);

    // 5.2 将图层插入当前视图

    [self.view.layerinsertSublayer:_LayeratIndex:0];

   

    // 启动会话

    [_sessionstartRunning];
3.二维码扫描代理事件
- (void)captureOutput:(AVCaptureOutput
*)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection
*)connection
{
   // 1.如果扫描完成,停止会话

    [self.sessionstopRunning];

    // 2.删除预览图层
    [_LayerremoveFromSuperlayer];
   
// 3.设置界面显示扫描结果,如果是url,打开连接,如果不是,输出内容及显示提示框
AVMetadataMachineReadableCodeObject * metadataObject = metadataObjects[0];

      NSURL * url = [NSURLURLWithString:metadataObject.stringValue];
   if ([[UIApplicationsharedApplication]canOpenURL:
url]) {

        [[UIApplicationsharedApplication]openURL:
url];

    } else {
       
UIAlertView * alertView = [[UIAlertViewalloc]initWithTitle:@"警告"message:
[NSStringstringWithFormat:@"%@:%@",@"无法解析的二维码",metadataObject.stringValue]delegate:nilcancelButto
8b42
nTitle:@"确定"otherButtonTitles:nil];
        [alertViewshow];
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息