스캔 기능(CR코드, 바코드)

1942 단어
이러한 효과를 실현하다
UIbuttonClick_2.gif
이 프레임을 먼저 도입할게요.
 #import 

그리고 다음 내용만 설정하면 스캔할 수 있습니다.
- (void)setupScaner {
    // 
    _captureSession = [[AVCaptureSession alloc]init];
    // 
    AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:nil];
    [_captureSession addInput:input];
    // 
    AVCaptureMetadataOutput *captureMetadataOutput = [[AVCaptureMetadataOutput alloc] init];
    [_captureSession addOutput:captureMetadataOutput];
    // ( ),ps: , 
    [captureMetadataOutput setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    [captureMetadataOutput setMetadataObjectTypes:[NSArray arrayWithObjects:AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code, nil]];
    // ( capture layer )
    AVCaptureVideoPreviewLayer *videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];
    [videoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
    [videoPreviewLayer setFrame:self.view.layer.bounds];
    [self.view.layer addSublayer:videoPreviewLayer];
    // 
    [_captureSession startRunning];
}

마지막으로 AVcapture Metadata Output Objects Delegate에서 이 프록시 방법을 사용하면 스캔 내용을 얻은 후에 사용자 정의 작업을 할 수 있습니다
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {
    if (metadataObjects != nil && [metadataObjects count] > 0) {
        AVMetadataMachineReadableCodeObject *metadataObj =[metadataObjects objectAtIndex:0];
        //metadataObj.stringValue ,  
        // nesting popViewController gif 
    }
}

액자에 놓고 이동선이 있는 것은 UIView를 추가하고 NSTimer를 사용해서 이루어진 것이다.

좋은 웹페이지 즐겨찾기