IOS 自带二维码扫描相关类的一些定义及用法

来源:互联网 发布:微赞源码 编辑:程序博客网 时间:2024/05/23 16:38

1.自带二维码扫描的一些相关类及其定义

#import <UIKit/UIKit.h>

#import <AVFoundation/AVFoundation.h>

@interface ViewController :UIViewController <AVCaptureMetadataOutputObjectsDelegate>

@property (strong,nonatomic)AVCaptureDevice * device;

@property (strong,nonatomic)AVCaptureDeviceInput * input;

@property (strong,nonatomic)AVCaptureMetadataOutput * output;

@property (strong,nonatomic)AVCaptureSession * session;

@property (strong,nonatomic)AVCaptureVideoPreviewLayer * preview;

@end


 - AVCaptureDevice: 一个音视频捕获设备对象代表一个物理捕获设备和与该设备相关的属性。使用该捕获设备对象去配置底层硬件的属性。捕获设备还提供输入数据(比如音频或视频)给捕获会话对象。

 AVCaptureDeviceInput: 该类是AVCaptureInput的一个具体子类用来从AVCaptureDevice类对象捕获数据信息。

 -AVCaptureMetadataOutput: 该类对象用于拦截从元数据对象发出的相关捕获,并且将它们转发给委托对象进行处理。您可以使用这个类的实例来处理特定类型的元数据中的输入数据。您使用这个类处理其他的输出对象,通常通过添加一个AVCaptureSession对象作为输出。

 -AVCaptureSession: 您使用该类对象协调输入设备的数据流输出。

 AVCaptureVideoPreviewLayer: 该类是CALayer的一个子类正在被一个输入设备捕获用来显示视频。

2.自带二维码扫描的相关类的使用

// Device:设置捕获设备的媒体类型

    _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

   

// Input:获取捕获设备捕获的数据

    _input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil];


// Output:用来拦截捕获并将捕获到的数据转发给委托处理 注:最后一句是用来设置捕获的区域(默认是全屏捕获二维码,效果不理想)

    _output = [[AVCaptureMetadataOutput alloc]init];

    [_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];

    [_output setRectOfInterest:CGRectMake(0.5,0.5,0.5,0.5)];


// Session:

    _session = [[AVCaptureSession alloc]init];

    [_session setSessionPreset:AVCaptureSessionPresetHigh];

    if ([_session canAddInput:self.input])

    {

        [_session addInput:self.input];

    }

    if ([_session canAddOutput:self.output])

    {

        [_session addOutput:self.output];

    }

   _output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode];


// Preview

    _preview =[AVCaptureVideoPreviewLayer layerWithSession:_session];

    _preview.videoGravity =AVLayerVideoGravityResizeAspectFill;

    _preview.frame =self.view.layer.bounds;

    [self.view.layer insertSublayer:_preview atIndex:0];

       

// Start 

    [_session startRunning];


3.委托方法

#pragma mark AVCaptureMetadataOutputObjectsDelegate

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

{

    NSString *stringValue;

    if ([metadataObjects count] >0)

    {

        

        AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjectsobjectAtIndex:0];

        stringValue = metadataObject.stringValue;

    }

    [_sessionstopRunning];

    UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:nil

                                                   message:stringValue

                                                  delegate:nil

                                         cancelButtonTitle:@"OK"

                                         otherButtonTitles:nil,nil];

    [alert show];

    

}


待完善!!!
0 0
原创粉丝点击