国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

iOS自帶二維碼掃描功能的實現

2019-11-14 18:06:46
字體:
來源:轉載
供稿:網友

#自從iOS7以后中新增了二維碼掃描功能。因此可以在不借助第三方類庫的情況下簡單的寫出二維碼的掃描功能;

原生的二維碼掃描功能在AVFoundation框架下,所以在使用原生的二維碼掃描功能時要先導入AVFoundation框架;

然后添加以下屬性:

<PRe><code>@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;</code></pre>

這里是對以上屬性的介紹

下面是對上面屬性的實例化:

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: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];

    self.preview = [AVCaptureVideoPreviewLayer layerWithSession:self.session];

    self.preview.videoGravity = AVLayerVideoGravityResizeaspectFill;

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

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

     [self.session startRunning];

 

這兒是掃碼成功之后調用的代理方法

#pragma mark AVCaptureMetadataOutputObjectsDelegate

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

{

    NSString *stringValue;

    if ([metadataObjects count] >0)

    {

        //停止掃描

        [_session stopRunning];

        AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex:0];

        stringValue = metadataObject.stringValue;

    }

    NSLog(@" %@",stringValue);

    // 獲取到二維碼的數據之后的后續操作

}

 

 以上代碼基本上可以實現掃碼的功能了。但是怎么樣才能實現規定區域內的掃碼呢?這就需要用到之間創建的屬性 output ;output有一個屬性

 output.rectOfInterest 專門用來設置可掃碼的區域;

設置AVCaptureMetadataOutput的rectOfInterest的屬性,即可掃描區域:

這樣設置就可以:output.rectOfInterest = CGRectMake(y的起點/屏幕的高,x的起點/屏幕的寬,掃描的區域的高/屏幕的高,掃描的區域的寬/屏幕的寬);

 

掃描動畫的實現:不在多說

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 常宁市| 定州市| 秭归县| 泾川县| 务川| 庆城县| 石家庄市| 靖江市| 会东县| 鸡东县| 收藏| 中牟县| 二连浩特市| 莎车县| 通榆县| 阿拉善盟| 邓州市| 化州市| 余姚市| 阿克| 张北县| 延长县| 桃源县| 金湖县| 祁连县| 桐庐县| 泸定县| 金乡县| 井冈山市| 读书| 佛冈县| 乌恰县| 舞阳县| 屏东市| 方山县| 体育| 当涂县| 芜湖县| 阆中市| 康平县| 延庆县|