iOS二維碼掃描

先上圖(詳細(xì)的都在keynote畫出來了>_<


二維碼掃描工作原理.jpg

圖永遠(yuǎn)都是最清晰明了的。下邊說說注意事項(xiàng):

     //如果沒獲得權(quán)限
    NSString *mediaType = AVMediaTypeVideo;
    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];
    if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){
    [AlertView alertWithTitle:nil message:@"親,請(qǐng)先到系統(tǒng)“隱私”中打開相機(jī)權(quán)限哦!" buttonTitle:@"知道啦!" confrimBlock:^{
        [self.navigationController popViewControllerAnimated:YES];
    }];
    
    return;
}
   _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

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

   _output = [[AVCaptureMetadataOutput alloc]init];
   [_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];

    _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];
     }
      // 條碼類型 AVMetadataObjectTypeQRCode
    _output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode];

    // Preview
    _preview =[AVCaptureVideoPreviewLayer layerWithSession:_session];
    _preview.videoGravity =AVLayerVideoGravityResize;
    _preview.frame =self.view.layer.bounds;
    [self.view.layer insertSublayer:_preview atIndex:0];

    [_session startRunning];

  //設(shè)置掃描輸出口的視圖捕捉范圍
    [_output setRectOfInterest:CGRectMake(cropRect.origin.y / screenHeight,
                                      cropRect.origin.x / screenWidth,
                                      cropRect.size.height / screenHeight,
                                      cropRect.size.width / screenWidth)];
        
 最后實(shí)現(xiàn)代理方法:
   #pragma mark AVCaptureMetadataOutputObjectsDelegate
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
        NSString *stringValue;
       if ([metadataObjects count] >0){
           //停止掃描
            [_session stopRunning];
            AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects safeObjectAtIndex:0];
            stringValue = metadataObject.stringValue;
       }else{
            //掃碼失敗
            [self.session startRunning];
            return; 
      }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 以前就寫過二維碼掃描的文章,今天難得抽出來時(shí)間重新整理了一下,把所有用都的關(guān)于二維碼的都寫在這了,二維碼問題,看了...
    WWest閱讀 50,654評(píng)論 94 287
  • 原計(jì)劃接下來更新UISearchController的文章,應(yīng)朋友邀請(qǐng),先更新一篇二維碼掃描的文章吧。 效果圖: ...
    Super_Yi閱讀 4,242評(píng)論 4 5
  • 在 iOS7 以前,在iOS中實(shí)現(xiàn)二維碼和條形碼掃描,我們所知的有,兩大開源組件ZBar與ZXing. 這兩大組件...
    野豬哥123閱讀 1,669評(píng)論 0 2
  • 在iOS7之前,二維碼掃描只能用第三庫(ZBar、ZXing),我的項(xiàng)目中只用到過ZXing,他們的優(yōu)劣大家自行百...
    小酒窩_David閱讀 1,047評(píng)論 0 8
  • -01- 你這一生,有沒有遇到過這么一個(gè)人,在你孤枕難眠的時(shí)候,他會(huì)樂不疲憊的陪你聊一個(gè)通宵 在你心情不好的時(shí)候,...
    城東李公子閱讀 397評(píng)論 0 1

友情鏈接更多精彩內(nèi)容