2016.1.18scan 二维码(仿照支付宝。微信)

2024-06-08 22:18

本文主要是介绍2016.1.18scan 二维码(仿照支付宝。微信),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 生成二维码(原生方法生成二维码)

首先  要把二维码上的信息付给他 

 tempStr=self.textField.text;


其次 创建一个图片(在此之前需要导入#import "QRCodeGenerator.h"

 UIImage*tempImage=[QRCodeGenerator qrImageForString:tempStr imageSize:360 Topimg:image withColor:RandomColor];

    _outImageView.image=t 这是一个imageviewpImage;

2.扫描二维码

2.1添加手势长按识别

    UILongPressGestureRecognizer*longPress=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(dealLongPress:)];

//把手势添加到图片上

    [_outImageView addGestureRecognizer:longPress];

    [self.view addSubview:_outImageView]


2.2长按手势方法并输出显示

-(void)dealLongPress:(UIGestureRecognizer*)gesture{

//

    if(gesture.state==UIGestureRecognizerStateBegan){

        _timer.fireDate=[NSDate distantFuture];

        UIImageView*tempImageView=(UIImageView*)gesture.view;

        if(tempImageView.image){

            //1. 初始化扫描仪,设置设别类型和识别质量

            CIDetector*detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{ CIDetectorAccuracy : CIDetectorAccuracyHigh }];

            //2. 扫描获取的特征组

            NSArray *features = [detector featuresInImage:[CIImage imageWithCGImage:tempImageView.image.CGImage]];

            //3. 获取扫描结果

            CIQRCodeFeature *feature = [features objectAtIndex:0];

            NSString *scannedResult = feature.messageString;

            UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"扫描结果" message:scannedResult delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

            [alertView show];

        }else {

            UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"扫描结果" message:@"您还没有生成二维码" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

            [alertView show];

        }

        

        

    }else if (gesture.state==UIGestureRecognizerStateEnded){

        

        //定时器  可不要

        _timer.fireDate=[NSDate distantPast];

    }


}

3 正常用相机扫描(导入 #import <AVFoundation/AVFoundation.h>

            #import "UIView+SDExtension.h"

创建session对象

@property (nonatomic, strong) AVCaptureSession *session;


{

    //获取摄像设备

    AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    //创建输入流

    AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];

    if (!input) return;

    //创建输出流

    AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];

    //设置代理 在主线程里刷新

    [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];

    //设置有效扫描区域

    CGRect scanCrop=[self getScanCrop:_scanWindow.bounds readerViewBounds:self.view.frame];

     output.rectOfInterest = scanCrop;

    //初始化链接对象

    _session = [[AVCaptureSession alloc]init];

    //高质量采集率

    [_session setSessionPreset:AVCaptureSessionPresetHigh];

    

    [_session addInput:input];

    [_session addOutput:output];

    //设置扫码支持的编码格式(如下设置条形码和二维码兼容)

    output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];

    

    AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:_session];

    layer.videoGravity=AVLayerVideoGravityResizeAspectFill;

    layer.frame=self.view.layer.bounds;

    [self.view.layer insertSublayer:layer atIndex:0];

    //开始捕获

    [_session startRunning];



4.选择一张图片然后 在扫描

#pragma mark-> 我的相册

-(void)myAlbum{

    NSLog(@"我的相册");

    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){

        //1.初始化相册拾取器

        UIImagePickerController *controller = [[UIImagePickerController alloc] init];

        //2.设置代理

        controller.delegate = self;

        //3.设置资源:

        /**

         UIImagePickerControllerSourceTypePhotoLibrary,相册

         UIImagePickerControllerSourceTypeCamera,相机

         UIImagePickerControllerSourceTypeSavedPhotosAlbum,照片库

         */

        controller.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

        //4.随便给他一个转场动画

        controller.modalTransitionStyle=UIModalTransitionStyleFlipHorizontal;

        [self presentViewController:controller animated:YES completion:NULL];

        

    }else{

        UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"设备不支持访问相册,请在设置->隐私->照片中进行设置!" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

        [alert show];

    }

    

}


#pragma mark-> imagePickerController delegate

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

{

    //1.获取选择的图片

    UIImage *image = info[UIImagePickerControllerOriginalImage];

    //2.初始化一个监测器

    CIDetector*detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{ CIDetectorAccuracy : CIDetectorAccuracyHigh }];

    [picker dismissViewControllerAnimated:YES completion:^{

        //监测到的结果数组

        NSArray *features = [detector featuresInImage:[CIImage imageWithCGImage:image.CGImage]];

        if (features.count >=1) {

            /**结果对象 */

            CIQRCodeFeature *feature = [features objectAtIndex:0];

            NSString *scannedResult = feature.messageString;

            UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"扫描结果" message:scannedResult delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

            [alertView show];

        }

        else{

            UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"该图片没有包含一个二维码!" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

            [alertView show];   

        }

    }];

}


5 打开闪光灯

#pragma mark-> 闪光灯

-(void)openFlash:(UIButton*)button{

    NSLog(@"闪光灯");

    button.selected = !button.selected;

    if (button.selected) {

        [self turnTorchOn:YES];

    }

    else{

        [self turnTorchOn:NO];

    }

    

}


#pragma mark-> 开关闪光灯

- (void)turnTorchOn:(BOOL)on

{

    

    Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");

    if (captureDeviceClass != nil) {

        AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

        

        if ([device hasTorch] && [device hasFlash]){

            

            [device lockForConfiguration:nil];

            if (on) {

                [device setTorchMode:AVCaptureTorchModeOn];

                [device setFlashMode:AVCaptureFlashModeOn];

                

            } else {

                [device setTorchMode:AVCaptureTorchModeOff];

                [device setFlashMode:AVCaptureFlashModeOff];

            }

            [device unlockForConfiguration];

        }

    }

}




这篇关于2016.1.18scan 二维码(仿照支付宝。微信)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1043461

相关文章

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[职场] 护理专业简历怎么写 #经验分享#微信

护理专业简历怎么写   很多想成为一名护理方面的从业者,但是又不知道应该怎么制作一份简历,现在这里分享了一份护理方面的简历模板供大家参考。   蓝山山   年龄:24   号码:12345678910   地址:上海市 邮箱:jianli@jianli.com   教育背景   时间:2011-09到2015-06   学校:蓝山大学   专业:护理学   学历:本科

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

Android我的二维码扫描功能发展史(完整)

最近在研究下二维码扫描功能,跟据从网上查阅的资料到自己勉强已实现扫描功能来一一介绍我的二维码扫描功能实现的发展历程: 首页通过网络搜索发现做android二维码扫描功能看去都是基于google的ZXing项目开发。 2、搜索怎么使用ZXing实现自己的二维码扫描:从网上下载ZXing-2.2.zip以及core-2.2-source.jar文件,分别解压两个文件。然后把.jar解压出来的整个c

android 带与不带logo的二维码生成

该代码基于ZXing项目,这个网上能下载得到。 定义的控件以及属性: public static final int SCAN_CODE = 1;private ImageView iv;private EditText et;private Button qr_btn,add_logo;private Bitmap logo,bitmap,bmp; //logo图标private st

微信小程序开发必知必会:文件结构和基本配置

一、微信小程序基本文件结构 1.  project.config.json:项目的基本配置文件,包括项目名称、appid、项目目录、页面文件夹等。     {"setting": {"urlCheck": false,"es6": true,"postcss": true,"nodeModulesPath": "D:\\\\node_modules"},"appid": "wxd678e

Android 二维码、条形码(识别率校验)

ZxingCode 以core-3.4.jar为基础构建,具有如下功能: 1.创建条形码、二维码; 2.相机扫描条形码、二维码; 3.读取照片条形码、二维码; 4.识别率算法修改提升; 5.扫码View背景颜色可修改; FIX-2022.5.12.1 1.新增手电筒开关调用方法; 2.新增暂停解码方法; 3.新增恢复解码方法; 4.虚拟机扫码崩溃; 5.OnScanCodeListener统

关于微信没有接入鸿蒙NEXT的思考

6月21日,纯血鸿蒙发布,国内的质疑声终于停止,不再被人喊叫换皮 Android 了.就连编程语言都是华为自研的。 可是发布会后微信却成了热点,因为余承东在感谢了一圈互联网企业,如:淘宝、支付宝、美团、京东、抖音、今日头条、钉钉、小红书、微博、B站、高德、WPS等等. 唯独没有感谢腾讯. 中国互联网巨头只有哪么几家,腾讯、阿里、字节、拼多多、美团、百度、京东、华为 他们这些派系又诞生了无数

用python写一个AI Agent对接企业微信上下游协同的案例

要实现一个AI Agent对接企业微信上下游协同,我们可以使用Python编写一个企业微信机器人,用于接收和处理来自企业微信的消息。在此示例中,我们将使用`wechatpy`库来实现企业微信机器人,并使用`requests`库实现与上下游系统的通信。 首先,确保安装了`wechatpy`和`requests`库: ```bash pip install wechatpy requests ``