简单使用系统的设备实现二维码扫描
2016-06-02 11:42
363 查看
这里我用了系统的东西简单的实现了一下扫描二维码
.h
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface saoMiaoViewController :
UIViewController
@property(nonatomic,retain)
UIView * sanRectView;
//硬件设备
@property(nonatomic,retain)
AVCaptureDevice * device;
//输入设备
@property(nonatomic,retain)
AVCaptureDeviceInput * input;
//输出设备
@property(nonatomic,retain)
AVCaptureMetadataOutput * outPut;
//桥梁。链接输入和输出设备
@property(nonatomic,retain)AVCaptureSession
* session;
@property(nonatomic,retain)AVCaptureVideoPreviewLayer
* preView;
@end
接下来看.m文件
@interface
saoMiaoViewController ()<AVCaptureMetadataOutputObjectsDelegate>
@end
@implementation saoMiaoViewController
- (void)viewDidLoad {
[super
viewDidLoad];
// Do any additional setup after loading the view.
self.title =
@"进入连接";
CGSize windowSize = [UIScreen
mainScreen].bounds.size;
CGSize scanSize =
CGSizeMake(windowSize.width*3/5, windowSize.width * 3/5);
CGRect scanRect =
CGRectMake( ((windowSize.height-scanSize.height)/2)/windowSize.height,((windowSize.width-scanSize.width)/2)/windowSize.width,
(scanSize.height+10)/windowSize.height,(scanSize.width + 10)/windowSize.width);
self.device = [AVCaptureDevice
defaultDeviceWithMediaType:AVMediaTypeVideo];
self.input = [AVCaptureDeviceInput
deviceInputWithDevice:self.device
error:nil];
self.outPut = [[AVCaptureMetadataOutput
alloc] init];
[self.outPut
setMetadataObjectsDelegate:self
queue:dispatch_get_main_queue()];
self.session = [[AVCaptureSession
alloc] init];
[self.session
setSessionPreset:([UIScreen
mainScreen].bounds.size.height<500)?AVCaptureSessionPreset640x480:AVCaptureSessionPresetHigh];
[self.session
addInput:self.input];
[self.session
addOutput:self.outPut];
self.outPut.metadataObjectTypes=@[AVMetadataObjectTypeQRCode];
self.preView = [AVCaptureVideoPreviewLayer
layerWithSession:self.session];
self.preView.videoGravity =
AVLayerVideoGravityResizeAspectFill;
self.preView.frame = [UIScreen
mainScreen].bounds;
self.preView.backgroundColor = [UIColor
colorWithRed:1 green:1
blue:1 alpha:0.7].CGColor;
[self.view.layer
insertSublayer:self.preView
atIndex:0];
self.sanRectView = [UIView
new];
[self.view
addSubview:self.sanRectView];
self.sanRectView.frame =
CGRectMake(0, 0, scanSize.width, scanSize.height);
self.sanRectView.center =
CGPointMake(CGRectGetMidX([UIScreen
mainScreen].bounds),
CGRectGetMidY([UIScreen
mainScreen].bounds));
self.sanRectView.layer.borderColor
= [UIColor whiteColor].CGColor;
self.sanRectView.layer.borderWidth
= 2;
self.outPut.rectOfInterest =scanRect;
//开始捕获
[self.session
startRunning];
}
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray
*)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
if ( (metadataObjects.count==0) )
{
return;
}
if (metadataObjects.count>0) {
[self.session
stopRunning];
AVMetadataMachineReadableCodeObject *metadataObject = metadataObjects.firstObject;
SendUrlViewController * send = [[SendUrlViewController
alloc] init];
send.nameUrl = metadataObject.stringValue;
[self.navigationController
pushViewController:send animated:YES];
}
}
此文纯属个人为了记忆而写。当然要是能帮到别人当然也很开心了A.A
.h
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface saoMiaoViewController :
UIViewController
@property(nonatomic,retain)
UIView * sanRectView;
//硬件设备
@property(nonatomic,retain)
AVCaptureDevice * device;
//输入设备
@property(nonatomic,retain)
AVCaptureDeviceInput * input;
//输出设备
@property(nonatomic,retain)
AVCaptureMetadataOutput * outPut;
//桥梁。链接输入和输出设备
@property(nonatomic,retain)AVCaptureSession
* session;
@property(nonatomic,retain)AVCaptureVideoPreviewLayer
* preView;
@end
接下来看.m文件
@interface
saoMiaoViewController ()<AVCaptureMetadataOutputObjectsDelegate>
@end
@implementation saoMiaoViewController
- (void)viewDidLoad {
[super
viewDidLoad];
// Do any additional setup after loading the view.
self.title =
@"进入连接";
CGSize windowSize = [UIScreen
mainScreen].bounds.size;
CGSize scanSize =
CGSizeMake(windowSize.width*3/5, windowSize.width * 3/5);
CGRect scanRect =
CGRectMake( ((windowSize.height-scanSize.height)/2)/windowSize.height,((windowSize.width-scanSize.width)/2)/windowSize.width,
(scanSize.height+10)/windowSize.height,(scanSize.width + 10)/windowSize.width);
self.device = [AVCaptureDevice
defaultDeviceWithMediaType:AVMediaTypeVideo];
self.input = [AVCaptureDeviceInput
deviceInputWithDevice:self.device
error:nil];
self.outPut = [[AVCaptureMetadataOutput
alloc] init];
[self.outPut
setMetadataObjectsDelegate:self
queue:dispatch_get_main_queue()];
self.session = [[AVCaptureSession
alloc] init];
[self.session
setSessionPreset:([UIScreen
mainScreen].bounds.size.height<500)?AVCaptureSessionPreset640x480:AVCaptureSessionPresetHigh];
[self.session
addInput:self.input];
[self.session
addOutput:self.outPut];
self.outPut.metadataObjectTypes=@[AVMetadataObjectTypeQRCode];
self.preView = [AVCaptureVideoPreviewLayer
layerWithSession:self.session];
self.preView.videoGravity =
AVLayerVideoGravityResizeAspectFill;
self.preView.frame = [UIScreen
mainScreen].bounds;
self.preView.backgroundColor = [UIColor
colorWithRed:1 green:1
blue:1 alpha:0.7].CGColor;
[self.view.layer
insertSublayer:self.preView
atIndex:0];
self.sanRectView = [UIView
new];
[self.view
addSubview:self.sanRectView];
self.sanRectView.frame =
CGRectMake(0, 0, scanSize.width, scanSize.height);
self.sanRectView.center =
CGPointMake(CGRectGetMidX([UIScreen
mainScreen].bounds),
CGRectGetMidY([UIScreen
mainScreen].bounds));
self.sanRectView.layer.borderColor
= [UIColor whiteColor].CGColor;
self.sanRectView.layer.borderWidth
= 2;
self.outPut.rectOfInterest =scanRect;
//开始捕获
[self.session
startRunning];
}
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray
*)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
if ( (metadataObjects.count==0) )
{
return;
}
if (metadataObjects.count>0) {
[self.session
stopRunning];
AVMetadataMachineReadableCodeObject *metadataObject = metadataObjects.firstObject;
SendUrlViewController * send = [[SendUrlViewController
alloc] init];
send.nameUrl = metadataObject.stringValue;
[self.navigationController
pushViewController:send animated:YES];
}
}
此文纯属个人为了记忆而写。当然要是能帮到别人当然也很开心了A.A
相关文章推荐
- 马化腾亲自“站台” 企业微信和个人微信互通能带来什么?
- 批处理制作二维码生成器
- jQuery qrcode生成二维码的方法
- 使用jquery.qrcode.min.js实现中文转化二维码
- jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
- jquery插件qrcode在线生成二维码
- JavaScript生成二维码图片小结
- php制作中间带自己定义图片二维码的方法
- ruby写扫描当前网页所有url的脚本
- zbar解码二维码和条形码示例
- php使用qr生成二维码的示例分享
- php实现扫描二维码根据浏览器类型访问不同下载地址
- PHP微信开发之二维码生成类
- PHP QRCODE生成彩色二维码的方法
- Jquery 类网页微信二维码图块滚动效果具体实现
- 使用PHP生成二维码的方法汇总
- Perl生成纯HTML代码二维码实例
- Symfony生成二维码的方法
- 基于JavaScript实现生成名片、链接等二维码
- Android扫描本地音乐文件开发案例分享