Ios二维码扫描

  这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画!

操作步骤:

  1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label

          

   2)、你需要在你当前的控制器中导入

        #import <AVFoundation/AVFoundation.h>

        <AVCaptureMetadataOutputObjectsDelegate>代理

   3)、在@interface中定义    

      @property (nonatomic,strong)AVCaptureDevice * device;

      @property (nonatomic,strong)AVCaptureDeviceInput * input;

      @property (nonatomic,strong)AVCaptureMetadataOutput * output;

      @property (nonatomic,strong)AVCaptureSession * session;

      @property (nonatomic,strong)AVCaptureVideoPreviewLayer * preview;

    4)、将UI界面中的俩个图片属性拖进来

      @property (strong, nonatomic) IBOutlet UIImageView *preReferImage;//这个是UI界面中的框子图片

      @property (nonatomic,strong)IBOutlet UIImageView * imageLine;//这个是UI界面中的绿色线条图片

    5)、就是将如下代码放进你的控制器中   

  - (void)viewDidLoad

    {

        [super viewDidLoad];

        [self setupCamera];//设置相机

}

    //设置相机

  -(void)setupCamera

    {

     // Device 属性 

     self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    // Input 属性

     NSError *error = nil;

     self.input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:&error];

   if (error) {

     NSLog(@"错误");

    return;

    }

    // Output 属性

     self.output = [[AVCaptureMetadataOutput alloc]init];

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

     // Session 属性

     self.session = [[AVCaptureSession alloc]init];

     [self.session setSessionPreset:AVCaptureSessionPresetHigh];

    if ([self.session canAddInput:self.input])

    {

     [self.session addInput:self.input];

   }

     if ([self.session canAddOutput:self.output])

  {

    [self.session addOutput:self.output];

   }

  self.output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode];//这里是设置扫描的类型

   // Preview 属性

  self.preview = [AVCaptureVideoPreviewLayer layerWithSession:self.session];

   self.preview.videoGravity = AVLayerVideoGravityResizeAspectFill;

  self.preview.frame = self.view.bounds;

  [self.view.layer insertSublayer:self.preview below:self.preReferImage.layer];  

  // Start 属性

  [self.session startRunning];  

    [self setupAnimation];//这个是横线的上下扫描动画,可添加可不添加

   }

/**注意了:你如果需要添加这个横线扫描的动画需要在@interface中添加如下几个属性*/

{

int lineValue; //保存横线的frame值

NSTimer * timer;//定时器让横线走动

BOOL Down;//向下

BOOL up;//向上

}

  //横线动画

 - (void)setupAnimation

  {

    CGFloat beginLineValue = CGRectGetMinY(self.preReferImage.frame);

   Down = YES;

   up = NO;

   lineValue =beginLineValue;

   [timer invalidate];

   timer = [NSTimer scheduledTimerWithTimeInterval:.01

target:self selector:@selector(animation1) userInfo:nil repeats:YES];

}

 -(void)animation1

  {

    if (Down) {

  CGFloat maxValue = CGRectGetMaxY(self.preReferImage.frame);

 lineValue++;

  self.imageLine.frame = CGRectMake(self.imageLine.frame.origin.x,lineValue, self.imageLine.frame.size.width, self.imageLine.frame.size.height);

if (lineValue ==maxValue) {

up = YES;

}

}

   if (up){

   CGFloat minValue = CGRectGetMinY(self.preReferImage.frame);

   lineValue-=2;

    self.imageLine.frame = CGRectMake(self.imageLine.frame.origin.x, lineValue, self.imageLine.frame.size.width, self.imageLine.frame.size.height);

if (lineValue ==minValue) {

Down = YES;

up = NO;

}

}

}

/**这个是必须要实现的代理方法,从这个方法中可以得到所扫描出来的URL*/

#pragma mark - AVCaptureMetadataOutputObjectsDelegate

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection

{

NSString * stringValue ;

if ([metadataObjects count] > 0) {

[self.session stopRunning];

AVMetadataMachineReadableCodeObject * metadataObj = [metadataObjects objectAtIndex:0];

stringValue = metadataObj.stringValue;

[timer invalidate];//这个是扫描成功后停止动画

timer = nil;

[self requestParsing:stringValue]; //这个是扫描成功后所做的网络请求方法,可以注释

NSLog(@"stringValue =%@",stringValue);

}

}

/**注意:

    1、以上这个例子只是说明如何使用系统自带的二维码扫描,没有做扫描成功后进行网络访问;

    2、这个二维码扫描除开中间图片框式可以看见外其他屏幕也是可以看见的,我的解决方法是添加一个View跟当前的这个View是在同一层次上不透明就可以了

    这个扫描中用到的框架有:

        AFNetworking    这个是用来网络请求的

        MBProgressHUD  这个是用来加载网络是的提示语的,例如网络加载中的时候,就会弹出一个框:正在加载中。。。等等!

  当然还有第三方的二维码扫描:ZXing和ZBar在github上都有下载

*/

Ios二维码扫描(系统自带的二维码扫描)的更多相关文章

  1. 运维自动化之系统部署 PXE(二)

    PXE介绍 Preboot Excution Environment 预启动执行环境 Intel公司研发 基于Client/Server的网络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持 ...

  2. 如何获取安卓系统自带应用的package和activity

    之前在做appium自动化测试的时候,参考网上的例子,运行安卓系统自带的app,所以,就需要获取系统自带的package(包名)和activity.这里简单记录一下,不一定适合所有的系统应用. 运行环 ...

  3. QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式

    目录 功能介绍 常见问题 效果图与示例 apk Gradle 依赖 布局文件 自定义属性说明 接口说明 关于我 功能介绍 根据之前公司的产品需求,参考 barcodescanner 改的,希望能帮助到 ...

  4. 微信公众号开发C#系列-11、生成带参数二维码应用场景

    1.概述 我们在微信公众号开发C#系列-7.消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解.本篇主要讲解通过微信公众号开发平台提供的接口生成带参数的二维码及应用场景. 微信公众号平台 ...

  5. C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取

    一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...

  6. php微信开发之带参数二维码的使用

    最近做微信PC端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把 ...

  7. 微信创建带参数二维码并加上logo

    1.因为带参数二维码有两种,分别是字符参数,数值参数,因此,在写创建方法的时候,需要进行判断 public void ShowQcCode(N_WX_QrCode code) { QRCodeCrea ...

  8. phpqrcode 分别生成普通、带logo、带背景带logo二维码

    前提:下载好 phpqrcode 类库 1.生成普通二维码 //引入类库 include('phpqrcode/phpqrcode.php'); //二维码里面的链接地址 $url="htt ...

  9. 利用phpqrcode二维码生成类库合成带logo的二维码并且用合成的二维码生成海报(二)

    前期准备 引入phpqrcode类库(下载地址:https://download.csdn.net/download/weixin_37557729/11891240:支持彩色二维码的下载地址:htt ...

随机推荐

  1. System.BadImageFormatException: 未能加载文件或程序集&quot;&quot;或它的某一个依赖项。试图加载格式不正确的程序。

    解决方法: 1.更改程序集的生成目标平台为[Any CPU],或者针对平台进行编译. 项目右键->[属性]->[生成]->[生成目标平台] 2.尝试一下修改线程池设置为32位支持.

  2. WCF小白初试 错误之一:“有零个应用程序终结点”的解决办法

    遇到这类问题 应该是配置文件出现了问题 解决办法是将配置文件中的<service name="命名空间+类名">就可以解决

  3. ASP.NET MVC5 高级编程 第5章 表单和HTML辅助方法

    参考资料<ASP.NET MVC5 高级编程>第5版 第5章 表单和HTML辅助方法 5.1 表单的使用 5.1.1 action 和 method 特性 默认情况下,表单发送的是 HTT ...

  4. javaee学习-JSP指令简介

    JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: page指令 Inclu ...

  5. C#异步编程----Thread

    一.问题由来 多线程能实现的基础: 1.CPU运行速度太快,硬件处理速度跟不上,所以操作系统进行分时间片管理.这样,宏观角度来说是多线程并发 ,看起来是同一时刻执行了不同的操作.但是从微观角度来讲,同 ...

  6. 【转载】C#检测客户端输入的内容是否含有危险字符串

    用户在客户端提交的内容有时候并不可信,如果客户端提交的内容中含有危险字符串信息,则很有可能造成应用程序安全性问题,如SQL注入风险等.因此在接收客户端提交过来的数据后,我们首先需要判断数据中是否含有危 ...

  7. 【Dubbo 源码解析】05_Dubbo 服务发现&amp;引用

    Dubbo 服务发现&引用 Dubbo 引用的服务消费者最终会构造成一个 Spring 的 Bean,具体是通过 ReferenceBean 来实现的.它是一个 FactoryBean,所有的 ...

  8. collections模块和os模块

    collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict. ...

  9. Windows版Mycat结合mysql安装配置+水平切分(转载)

    来源:https://segmentfault.com/a/1190000009495748 参考文档:Mycat安装与使用 环境 环境 版本 windows 10 java 1.8.0 mysql ...

  10. 全面解析JavaScript的Backbone.js框架中的Router路由

    这篇文章主要介绍了Backbone.js框架中的Router路由功能,Router在Backbone中相当于一个MVC框架中的Controller控制器功能,需要的朋友可以参考下. Backbone ...