ios二维码扫描
1.添加AVFoundation.framework框架
2,控制器中实现
//第一步添加AVFoundation.framework框架
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
#import "RYPreView.h"
@interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>
//定义输入设备,用户采集信息,
@property(nonatomic,strong)AVCaptureDeviceInput*input;
//定义输出设备,处理采集的信息,获得数据
@property(nonatomic,strong)AVCaptureMetadataOutput*outPut;
//定义连接输入输出设备的会话
@property(nonatomic,strong)AVCaptureSession*session;
//定义展示信息的图层
@property(nonatomic,strong)RYPreView*preview;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//1,定义输入设备,摄像头
AVCaptureDevice *device=[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
self.input=[AVCaptureDeviceInput deviceInputWithDevice:device error:NULL];
//2.输出设备
self.outPut=[[AVCaptureMetadataOutput alloc]init];
//3.定义session会话
self.session=[[AVCaptureSession alloc]init];
//展示大小
[self.session setSessionPreset:AVCaptureSessionPreset640x480];
//添加输入输出设备
if([self.session canAddInput:self.input])
{
[self.session addInput:self.input];
}
if ([self.session canAddOutput:self.outPut]) {
[self.session addOutput:self.outPut];
}
//指定输出设备代理
[self.outPut setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
//设置元数据类型 二维码
[self.outPut setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
//需要一个特殊的layer来处理展示的数据 AVCaptureVideoPreviewLayer
//方法一可以再这里创建并设置大小
//方法二
RYPreView *preview=[[RYPreView alloc]initWithFrame:self.view.bounds];
preview.session=self.session;
[self.view addSubview:preview];
//开启会话
[self.session startRunning];
}
//解析元数据调用
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
//停止会话
[self.session stopRunning];
//移除视图layer
[self.preview removeFromSuperview];
//获取信息
for (AVMetadataMachineReadableCodeObject* objc in metadataObjects) {
NSLog(@"%@",objc.stringValue);
}
}
@end
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface RYPreView : UIView
//定义session,实现session与当前layer绑定
@property(nonatomic,strong)AVCaptureSession*session;
@end
#import "RYPreView.h"
@interface RYPreView()
@property(nonatomic,strong)UIImageView*imageCover;
@property(nonatomic,strong)UIImageView*lineImage;//
@property(nonatomic,strong)NSTimer*timer;//动画时间间距
@end
@implementation RYPreView
//自定义需要layer的类型 session 需要绑定的layer类型为AVCaptureVideoPreviewLayer
+(Class)layerClass
{
return [AVCaptureVideoPreviewLayer class];
}
//重写set方法
-(void)setSession:(AVCaptureSession *)session
{
_session=session;
AVCaptureVideoPreviewLayer *layer=(AVCaptureVideoPreviewLayer*)self.layer;
layer.session=session;
}
-(instancetype)initWithFrame:(CGRect)frame
{
if (self=[super initWithFrame:frame]) {
[self addSubviewWithFrame];
}
return self;
}
//初始化自定义控件
-(void)addSubviewWithFrame
{
//设置背景图片
self.imageCover = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pick_bg.png"]];
//设置位置到界面的中间
self.imageCover.frame = CGRectMake(self.bounds.size.width * 0.5 - 140, self.bounds.size.height * 0.5 - 140, 280, 280);
//添加到视图上
[self addSubview:self.imageCover];
//初始化二维码的扫描线的位置
self.lineImage = [[UIImageView alloc] initWithFrame:CGRectMake(30, 10, 220, 2)];
self.lineImage.image = [UIImage imageNamed:@"line.png"];
[self.imageCover addSubview:self.lineImage];
//开启定时器
_timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(animation) userInfo:nil repeats:YES];
}
- (void)animation
{
[UIView animateWithDuration:2.8 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
self.lineImage.frame = CGRectMake(30, 260, 220, 2);
} completion:^(BOOL finished) {
self.lineImage.frame = CGRectMake(30, 10, 220, 2);
}];
}
@end
ios二维码扫描的更多相关文章
- Ios二维码扫描(系统自带的二维码扫描)
Ios二维码扫描 这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画! 操作步骤: 1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label 2).你需要在你 ...
- iOS二维码扫描IOS7系统实现
扫描相关类 二维码扫描需要获取摄像头并读取照片信息,因此我们需要导入系统的AVFoundation框架,创建视频会话.我们需要用到一下几个类: AVCaptureSession 会话对象.此类作为硬件 ...
- iOS - 二维码扫描和应用跳转
序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如ZXing或者ZBar.使用时集成麻烦, ...
- ios二维码扫描插件,适配当前主流扫描软件,自定义扫描界面。
二维码介绍: 二维码(QR(Quick Response)code),又称二维条码,最早起源于日本. 它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息 ...
- iOS二维码扫描的实现(Swift)
随着二维码的普遍使用,二维码扫描也成为了很多app的一个基本功能,本篇主要来介绍一下如何实现一个简单的二维码扫描功能.本文使用了XCode自带的AVFoundation 库,利用Swfit语言实现. ...
- iOS 二维码扫描 通过ZBar ZXing等第三方库
扫描二维码的开源库有很多如 ZBar.ZXing等 ZBar的使用方法: 下载ZBar SDK 地址https://github.com/bmorton/ZBarSDK ZBarSDK是一个开源的SD ...
- iOS 二维码扫描
// 导入 AVFoundation.framwork 框架#import "HDCodeViewController.h" #import "HDNormalViewC ...
- 有关iOS系统中调用相机设备实现二维码扫描功能的注意点(3/3)
今天我们接着聊聊iOS系统实现二维码扫描的其他注意点. 大家还记得前面我们用到的输出数据的类对象吗?AVCaptureMetadataOutput,就是它!如果我们需要实现目前主流APP扫描二维码的功 ...
- iOS开发-二维码扫描和应用跳转
iOS开发-二维码扫描和应用跳转 序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如Z ...
随机推荐
- Linux释放内存空间
Linux服务器运行一段时间后,由于其内存管理机制,会将暂时不用的内存转为buff/cache,这样在程序使用到这一部分数据时,能够很快的取出,从而提高系统的运行效率,所以这也正是linux内存管理中 ...
- iOS基础框架的搭建/国际化操作
1.基础框架的搭建 1.1 pod引入常用的第三方类库 1.2 创建基础文件夹结构/目录结构 Resource———存放声音/图片/xib/storyboard 等资源文件 Define——宏定义, ...
- nyoj221_Tree_subsequent_traversal
Tree 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 Little Valentine liked playing with binary trees very ...
- 【linux】vim的一些快捷键
ctrl+y :重复上一行内容 v+移动光标 :选择内容 y :复制选中的内容 p :在光标处粘贴复制的内容 ctrl+v :进入列模式,可以选择多列数据 dd :剪切一行,也可做删除一行使用
- NIS 报错No such map passwd.byname. Reason: Can't bind to server which serves this domain
在NIS—client端使用命令:ypcat passwd ,把错如上题, 原因:client端ypbind服务未启动解决方法:当然是启动ypbind了,命令:service ypbind start ...
- iOS-JavaScript向WKWebView传值
一.本地代码所需操作 1.创建viewController并遵守协议 @interface ViewController ()<WKNavigationDelegate,WKScriptMess ...
- 数据库的日志数据库(_log.ldf)文件太大,如何压缩
DUMP TRANSACTION TCB WITH NO_LOGBACKUP LOG TCB WITH NO_LOGDBCC SHRINKDATABASE(TCB) 执行这三条语句就可以了,这里的TC ...
- Spring控制反转与依赖注入(IOC、DI)
IOC: 反转控制 Inverse Of Control DI:依赖注入 Dependency Injection 目的:完成程序的解耦合 解释:在应用系统的开发过程中,有spring负责对象的创 ...
- 解决window删除文件时提示: 源文件名长度大于系统支持的长度
import java.io.File; /** */ public class DeleteFiles { public static void deleteFiles( File file ){ ...
- springmvc中RedirectAttributes的作用
RedirectAttributes在重定向的时候可以传参,不能跨站传参,因为参数是保存在服务器端