Ios二维码扫描(系统自带的二维码扫描)
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二维码扫描(系统自带的二维码扫描)的更多相关文章
- 运维自动化之系统部署 PXE(二)
PXE介绍 Preboot Excution Environment 预启动执行环境 Intel公司研发 基于Client/Server的网络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持 ...
- 带货直播源码开发采用MySQL有什么优越性
MySQL是世界上最流行的开源关系数据库,带货直播源码使用MySQL,可实现分钟级别的数据库部署和弹性扩展,不仅经济实惠,而且稳定可靠,易于运维.云数据库 MySQL 提供备份恢复.监控.容灾.快速扩 ...
- 如何获取安卓系统自带应用的package和activity
之前在做appium自动化测试的时候,参考网上的例子,运行安卓系统自带的app,所以,就需要获取系统自带的package(包名)和activity.这里简单记录一下,不一定适合所有的系统应用. 运行环 ...
- QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式
目录 功能介绍 常见问题 效果图与示例 apk Gradle 依赖 布局文件 自定义属性说明 接口说明 关于我 功能介绍 根据之前公司的产品需求,参考 barcodescanner 改的,希望能帮助到 ...
- 微信公众号开发C#系列-11、生成带参数二维码应用场景
1.概述 我们在微信公众号开发C#系列-7.消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解.本篇主要讲解通过微信公众号开发平台提供的接口生成带参数的二维码及应用场景. 微信公众号平台 ...
- C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取
一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...
- php微信开发之带参数二维码的使用
最近做微信PC端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把 ...
- phpqrcode 分别生成普通、带logo、带背景带logo二维码
前提:下载好 phpqrcode 类库 1.生成普通二维码 //引入类库 include('phpqrcode/phpqrcode.php'); //二维码里面的链接地址 $url="htt ...
- 微信小程序生成带参二维码
需求:生成小程序中的海报,需要小程序二维码可以使用户保存到本地在朋友圈分享 生成二维码工具类代码如下: package com.aone.foottalk.action.wx.util; import ...
随机推荐
- SQLServer中系统存储过程sp_spaceused
sp_spaceused 执行sp_spaceused存储过程的时候可以不用带参数,直接执行,或者exec sp_spaceused都可以,返回两个结果集: 列名 数据类型 描述 database_n ...
- HTML的<object>标签 (转)
object标签用于定义一个嵌入的对象,包括:图像.音频.Java applets.ActiveX.PDF以及Flash.该标签允许您规定插入HTML文档中的对象的数据和参数,以及可用来显示和操作数据 ...
- final发布视频
final版本发布的视频已上传至秒拍,视频地址: http://m.miaopai.com/show/channel/AHqv~VA7lrk144ONLWrveQ__ 以下是功能截图: ...
- CopyFile类通过调用这个类的delete(String filePath)方法可以组合成一个Cut类
package folderoperation; import java.io.File;/** * 注意它会删除文件,文件夹以及文件夹下的所有内容(根据指定的地址) * @author Dawn * ...
- 转:Log4j使用
转:https://my.oschina.net/kkrgwbj/blog/638780 日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录. ...
- Hibernate 基础配置及常用功能(三)
本章重点讲述Hibernate对象的三种状态以及如何配置二级缓存 有关Hibernate的三种状态如何相互转换网上都能查到,官方文档描述的也比较详细.这里主要是针对几个重点方法做代码演示. 一.状态转 ...
- Centos7下dnscrypt-proxy安装
DNS劫持指的是"一些设备"会拦截DNS解析请求,并将错误的DNS信息返回给主机:DNS污染指的是"一些设备"会将错误的域名信息下发至公共的DNS服务器中(比如 ...
- centos7 卸载openJDK 安装jdk7
[root@cms02 root]# rpm -qa | grep jdk java--openjdk-headless-1.7.0.75-2.5.4.2.el7_0.x86_64 java--ope ...
- phpcms v9联动菜单的调用方法及get_linkage函数简单过程
{get_linkage($r['areaid'],1,' >> ',1)} 复制代码 当然这个 $r 也不是绝对的.要看你的loop 是如何写的. {loop $data $n $r} ...
- python学习之迭代器与生成器
1.迭代器省内存 迭代器只允许往后读数据,不允许回读数据 迭代器不能跳着读文件,因为他是一点一点加载文件内容到内存的,读完了可以销毁或丢掉 2.生成一个迭代器 a = iter(["fd&q ...