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

1.二维码生成
    // 1. 实例化二维码滤镜
   
CIFilter *filter = [ CIFilter filterWithName : @"CIQRCodeGenerator" ];
   
   
// 2. 恢复滤镜的默认属性(因为滤镜有可能保存上一次的属性)
    [filter
setDefaults ];
   
   
// 3. 将字符串转换成 NSData
   
NSString *str = @" 这是一句话 " ;
   
NSData *data = [str dataUsingEncoding : NSUTF8StringEncoding ];
   
   
// 4. 通过 KVC 设置滤镜 传入 data ,将来滤镜就知道要通过传入的数据生成二维码
    [filter
setValue :data forKey : @"inputMessage" ];
   
   
// 5. 获得滤镜输出的图像(生成二维码)
   
CIImage *outputImage = [filter outputImage ];
   
UIImage *image = [ UIImage imageWithCIImage :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:nilcancelButtonTitle:@"确定"otherButtonTitles:nil];
        [alertViewshow];
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值