實現(xiàn)這樣一個效果效果
UIbuttonClick_2.gif
先引入這個框架
#import <AVFoundation/AVFoundation.h>
然后只需要設置以下內(nèi)容就可掃描到了
- (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];
//設置掃描的內(nèi)容(這設置就只掃條形碼),ps:通常放在主線程,如果在子線程回調(diào)會很慢
[captureMetadataOutput setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
[captureMetadataOutput setMetadataObjectTypes:[NSArray arrayWithObjects:AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code, nil]];
//初始化顯示層(將相機capture到的內(nèi)容展示到layer層上)
AVCaptureVideoPreviewLayer *videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];
[videoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
[videoPreviewLayer setFrame:self.view.layer.bounds];
[self.view.layer addSublayer:videoPreviewLayer];
//開始
[_captureSession startRunning];
}
最后只需在AVCaptureMetadataOutputObjectsDelegate中使用這個代理方法即可在獲取到掃描內(nèi)容后自定義操作
- (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就能實現(xiàn)gif的效果
}
}
置于相框敌蜂,還有別的有會移動線、是通過增加一些UIView绅项、以及使用NSTimer來實現(xiàn)了紊册。