亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

iOS自帶AVFoundation庫實現二維碼掃描

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

.h里

#import <AVFoundation/AVFoundation.h>

@interface ErWeiViewController : UIViewController<AVCaptureMetadataOutputObjectsDelegate>

-(BOOL)startReading;

-(void)stoPReading;

 

//捕捉會話

@property (nonatomic, strong) AVCapturesession *captureSession;

//展示layer

@property (nonatomic, strong) AVCaptureVideoPreviewLayer *videoPreviewLayer;

@property(nonatomic, assign)BOOL isReading;

@property (strong, nonatomic) UIView *boxView;

@property (strong, nonatomic) CALayer *scanLayer;

 

@property (strong, nonatomicUIView *viewPreview;

@property (strong, nonatomicUILabel *lblStatus;

@property (strong, nonatomicUIButton *startBtn;

- (void)startStopReading:(id)sender;

 

 

.m里

- (void)viewDidLoad {

    [super viewDidLoad];

       _captureSession = nil;

    _isReading = NO;

    [self startReading];

    

}

-(BOOL)startReading {

    _viewPreview = [[UIView alloc]initWithFrame:self.view.bounds];

    [self.view addSubview:_viewPreview];

    NSError *error;

    //1.初始化捕捉設備(AVCaptureDevice),類型為AVMediaTypeVideo

    AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    //2.captureDevice創建輸入流

    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error];

    if (!input) {

        NSLog(@"%@", [error localizedDescription]);

        return NO;

    }

    //3.創建媒體數據輸出流

    AVCaptureMetadataOutput *captureMetadataOutput = [[AVCaptureMetadataOutput alloc] init];

    //4.實例化捕捉會話

    _captureSession = [[AVCaptureSession alloc] init];

    //4.1.將輸入流添加到會話

    [_captureSession addInput:input];

    //4.2.將媒體輸出流添加到會話中

    [_captureSession addOutput:captureMetadataOutput];

    //5.創建串行隊列,并加媒體輸出流添加到隊列當中

    dispatch_queue_t dispatchQueue;

    dispatchQueue = dispatch_queue_create("myQueue", NULL);

    //5.1.設置代理

    [captureMetadataOutput setMetadataObjectsDelegate:self queue:dispatchQueue];

    //5.2.設置輸出媒體數據類型為所有類型

captureMetadataOutput.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];

    //6.實例化預覽圖層

    _videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];

    //7.設置預覽圖層填充方式

    [_videoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeaspectFill];

    //8.設置圖層的frame

    [_videoPreviewLayer setFrame:_viewPreview.layer.bounds];

    //9.將圖層添加到預覽view的圖層上

    [_viewPreview.layer addSublayer:_videoPreviewLayer];

    //10.設置掃描范圍

    captureMetadataOutput.rectOfInterest = CGRectMake(0.2f, 0.2f, 0.8f, 0.8f);

    //10.1.掃描框

    _boxView = [[UIView alloc] initWithFrame:CGRectMake(_viewPreview.bounds.size.width * 0.2f, _viewPreview.bounds.size.height * 0.2f, _viewPreview.bounds.size.width - _viewPreview.bounds.size.width * 0.4f, _viewPreview.bounds.size.height - _viewPreview.bounds.size.height * 0.4f)];

    _boxView.layer.borderColor = [UIColor greenColor].CGColor;

    _boxView.layer.borderWidth = 1.0f;

    [_viewPreview addSubview:_boxView];

    //10.2.掃描線

    _scanLayer = [[CALayer alloc] init];

    _scanLayer.frame = CGRectMake(0, 0, _boxView.bounds.size.width, 1);

    _scanLayer.backgroundColor = [UIColor brownColor].CGColor;

    [_boxView.layer addSublayer:_scanLayer];

    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.2f target:self selector:@selector(moveScanLayer:) userInfo:nil repeats:YES];

    [timer fire];

    

    //10.開始掃描

    [_captureSession startRunning];

    return YES;

}

 

#pragma mark - AVCaptureMetadataOutputObjectsDelegate協議方法

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

{

    //判斷是否有數據

    if (metadataObjects != nil && [metadataObjects count] > 0) {

        AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjects objectAtIndex:0];

        //判斷回傳的數據類型  captureMetadataOutput.metadataObjectTypes  數組里的類型進行遍歷對比 添加if判斷類型,

//        下面只以AVMetadataObjectTypeQRCode 為例子

//        if ([[metadataObj type] isEqualToString:AVMetadataObjectTypeQRCode]) {

//            [_lblStatus performSelectorOnMainThread:@selector(setText:) withObject:[metadataObj stringValue] waitUntilDone:NO];

//            NSLog(@"11111 = %@", _lblStatus.text);

//            [self performSelectorOnMainThread:@selector(stopReading) withObject:nil waitUntilDone:NO];

//            _isReading = NO;

//        }

 

    }

    [self dismissViewControllerAnimated:YES completion:^{

        

        

    }];

 

}

//實現計時器方法moveScanLayer:(NSTimer *)timer

 

- (void)moveScanLayer:(NSTimer *)timer

{

    CGRect frame = _scanLayer.frame;

    if (_boxView.frame.size.height < _scanLayer.frame.origin.y) {

        frame.origin.y = 0;

        _scanLayer.frame = frame;

    }else{

        frame.origin.y += 5;

        [UIView animateWithDuration:0.1 animations:^{

            _scanLayer.frame = frame;

        }];

    }

}

- (void)startStopReading:(id)sender {

    if (!_isReading) {

        if ([self startReading]) {

            [_startBtn setTitle:@"Stop" forState:UIControlStateNormal];

            [_lblStatus setText:@"Scanning for QR Code"];

        }

    }

    else{

        [self stopReading];

        [_startBtn setTitle:@"Start!" forState:UIControlStateNormal];

    }

    _isReading = !_isReading;

}

-(void)stopReading{

    [_captureSession stopRunning];

    _captureSession = nil;

    [_scanLayer removeFromSuperlayer];

    [_videoPreviewLayer removeFromSuperlayer];

}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文理论片| 日本国产高清不卡| 国产精品美女呻吟| 狠狠躁夜夜躁人人爽天天天天97| 日日骚久久av| 久久婷婷国产麻豆91天堂| 久久久久久噜噜噜久久久精品| 蜜臀久久99精品久久久无需会员| 91久久在线播放| 色婷婷综合成人av| 欧美激情精品久久久久久久变态| 亚洲视频777| 久久九九免费视频| 97在线精品视频| 亚洲高清一二三区| 国产精品视频免费观看www| 日韩在线观看免费高清完整版| 色综合久久88| 成人激情在线观看| 亚洲国产精品久久久| 欧美日韩国产精品一区二区三区四区| 国产精品精品视频一区二区三区| 成人av在线网址| 成人高清视频观看www| 欧美电影在线观看网站| 97视频在线观看免费高清完整版在线观看| 国产精品久久久久久久午夜| 91精品久久久久久久久久另类| 亚洲aⅴ男人的天堂在线观看| 一区二区三区四区在线观看视频| 欧美日韩中文在线| 亚洲激情视频网| 国产精品精品视频一区二区三区| 国产精品伦子伦免费视频| 国产精品青草久久久久福利99| 日韩国产欧美区| 亚洲国产精品久久久久秋霞不卡| 日韩高清av在线| 亚洲qvod图片区电影| 热99精品只有里视频精品| 国语自产精品视频在线看| 97视频免费观看| 欧美国产中文字幕| 欧美性视频网站| 日韩美女在线播放| 午夜精品久久久久久久99热浪潮| 国产精品免费看久久久香蕉| 91精品中国老女人| 欧洲亚洲免费在线| 欧美专区在线视频| 国产成+人+综合+亚洲欧洲| 少妇高潮久久久久久潘金莲| 欧美国产第一页| 久热精品视频在线观看一区| 欧美视频在线观看 亚洲欧| 91九色国产视频| 色一情一乱一区二区| 国产免费一区二区三区香蕉精| 欧美日韩一区二区三区在线免费观看| 午夜免费在线观看精品视频| 亚洲加勒比久久88色综合| 欧美日韩在线看| 91久久在线视频| 亚洲香蕉成人av网站在线观看| 98精品国产自产在线观看| 亚洲精品有码在线| 九九热精品视频在线播放| 国产精品91视频| 91精品久久久久| 成人性生交大片免费看小说| 亚洲欧美一区二区三区情侣bbw| 亚洲视频一区二区| 日韩在线观看成人| 欧美激情手机在线视频| 日韩视频欧美视频| 欧美激情国产高清| 日韩国产欧美精品一区二区三区| 亚洲欧美色婷婷| 国产精品成av人在线视午夜片| 亚洲字幕在线观看| 国内精品美女av在线播放| 日韩电影大片中文字幕| xxxxx成人.com| 91大神福利视频在线| 欧美一性一乱一交一视频| 久久久精品一区二区| 欧美电影《睫毛膏》| 国产精品久久久亚洲| 色婷婷综合成人| 78m国产成人精品视频| 亚洲国产精品视频在线观看| 在线观看91久久久久久| 欧美在线影院在线视频| 日韩免费电影在线观看| 精品呦交小u女在线| 色综合色综合久久综合频道88| 精品福利在线观看| 亚洲欧洲美洲在线综合| 伦伦影院午夜日韩欧美限制| 国产精品视频最多的网站| 91久久精品国产91久久| 日韩av三级在线观看| 欧美精品久久久久久久久| 久久久久久久久久久亚洲| 欧美成人精品三级在线观看| 国产精品久久久久久久久借妻| 伊人伊成久久人综合网站| 国内精品400部情侣激情| 久久久久一本一区二区青青蜜月| 色婷婷综合久久久久中文字幕1| 欧美色视频日本版| 国产精品91一区| 亚洲国产91精品在线观看| 亚洲娇小xxxx欧美娇小| 久久亚洲国产精品| 久久久国产精品亚洲一区| 91久久精品美女高潮| 国产黑人绿帽在线第一区| 久久久久国色av免费观看性色| 国产精品igao视频| 北条麻妃一区二区在线观看| 日本视频久久久| 亚洲图片在区色| 国产亚洲欧美日韩美女| 欧美国产欧美亚洲国产日韩mv天天看完整| 韩曰欧美视频免费观看| 欧美日韩电影在线观看| 日韩高清欧美高清| 亚洲国产精品久久久久| 日日骚av一区| 国产中文欧美精品| 日韩av在线资源| 久久视频国产精品免费视频在线| 亚洲欧美日韩一区二区在线| 欧美在线视频播放| 777精品视频| 欧美日韩国产va另类| 精品国产自在精品国产浪潮| 成人激情综合网| 成人性生交大片免费看视频直播| 韩国福利视频一区| 久久久99久久精品女同性| 欧洲亚洲妇女av| 亚洲国产精品久久久久| 自拍视频国产精品| 日韩中文视频免费在线观看| 精品人伦一区二区三区蜜桃免费| 国产精品永久免费观看| 久久人人97超碰精品888| 综合网日日天干夜夜久久| 亚洲嫩模很污视频| 精品免费在线观看| 亚洲欧洲激情在线| 欧美午夜精品久久久久久浪潮| 日本精品va在线观看| 亚洲精品电影久久久| 国产亚洲精品一区二区| 国产男人精品视频| 91av在线免费观看| 亚洲第一福利网站| 国产精品美女久久久久久免费| 亚洲人成在线播放| 亚洲免费伊人电影在线观看av| 久久在线观看视频|