您的位置:首页 > 其它

简单使用系统的设备实现二维码扫描

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二维码 扫描