二維碼掃描

來源

二維碼掃描

ios7之前我們實(shí)現(xiàn)二維碼掃描一般是借助第三方來實(shí)現(xiàn)赏表,但是在ios7之后系統(tǒng)自己提供二維碼掃面的方法,而且用原生的方法性能要比第三方的要好很多

@interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>//用于處理采集信息的代理
{
    AVCaptureSession * session;//輸入輸出的中間橋梁
}
@end
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //獲取攝像設(shè)備
    AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    //創(chuàng)建輸入流
    AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
    if (!input) return;
    //創(chuàng)建輸出流
    AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];
    //設(shè)置代理 在主線程里刷新
    [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    //設(shè)置有效掃描區(qū)域
    CGRect scanCrop=[self getScanCrop:_scanWindow.bounds readerViewBounds:self.view.frame];
     output.rectOfInterest = scanCrop;
    //初始化鏈接對象
    _session = [[AVCaptureSession alloc]init];
    //高質(zhì)量采集率
    [_session setSessionPreset:AVCaptureSessionPresetHigh];
    
    [_session addInput:input];
    [_session addOutput:output];
    //設(shè)置掃碼支持的編碼格式(如下設(shè)置條形碼和二維碼兼容)
    output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
    
    AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
    layer.videoGravity=AVLayerVideoGravityResizeAspectFill;
    layer.frame=self.view.layer.bounds;
    [self.view.layer insertSublayer:layer atIndex:0];
    //開始捕獲
    [_session startRunning];
}

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
    if (metadataObjects.count>0) {
        //[session stopRunning];
        AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex : 0 ];
        //輸出掃描字符串
        NSLog(@"%@",metadataObject.stringValue);
        //移除layer,停止掃描
    }
}

一些初始化的代碼加上實(shí)現(xiàn)代理方法便完成了二維碼掃描的工作迎变,這里我們需要注意的是, 在二維碼掃描的時候, 我們一般都會在屏幕中間放一個方框沿侈,用來顯示二維碼掃描的大小區(qū)間,這里我們在個AVCaptureMetadataOutput類中有一個rectOfInterest屬性市栗,它的作用就是設(shè)置掃描范圍缀拭。

這個CGRect參數(shù)和普通的Rect范圍不太一樣,它的四個值的范圍都是0-1填帽,表示比例蛛淋。
rectOfInterest都是按照橫屏來計(jì)算的 所以當(dāng)豎屏的情況下 x軸和y軸要交換一下。
寬度和高度設(shè)置的情況也是類似篡腌。

我們在上面設(shè)置有效掃描區(qū)域的方法如下

#pragma mark-> 獲取掃描區(qū)域的比例關(guān)系
-(CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)readerViewBounds
{
    
    CGFloat x,y,width,height;
    
    x = (CGRectGetHeight(readerViewBounds)-CGRectGetHeight(rect))/2/CGRectGetHeight(readerViewBounds);
    y = (CGRectGetWidth(readerViewBounds)-CGRectGetWidth(rect))/2/CGRectGetWidth(readerViewBounds);
    width = CGRectGetHeight(rect)/CGRectGetHeight(readerViewBounds);
    height = CGRectGetWidth(rect)/CGRectGetWidth(readerViewBounds);
    
    return CGRectMake(x, y, width, height);
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末褐荷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嘹悼,更是在濱河造成了極大的恐慌叛甫,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杨伙,死亡現(xiàn)場離奇詭異其监,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)限匣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門抖苦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事锌历≈樱” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵究西,是天一觀的道長窗慎。 經(jīng)常有香客問我,道長怔揩,這世上最難降的妖魔是什么捉邢? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮商膊,結(jié)果婚禮上伏伐,老公的妹妹穿的比我還像新娘。我一直安慰自己晕拆,他們只是感情好藐翎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著实幕,像睡著了一般吝镣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昆庇,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天末贾,我揣著相機(jī)與錄音,去河邊找鬼整吆。 笑死拱撵,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的表蝙。 我是一名探鬼主播拴测,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼府蛇!你這毒婦竟也來了集索?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤汇跨,失蹤者是張志新(化名)和其女友劉穎务荆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扰法,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛹含,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了塞颁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖祠锣,靈堂內(nèi)的尸體忽然破棺而出酷窥,到底是詐尸還是另有隱情,我是刑警寧澤伴网,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布蓬推,位于F島的核電站,受9級特大地震影響澡腾,放射性物質(zhì)發(fā)生泄漏沸伏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一动分、第九天 我趴在偏房一處隱蔽的房頂上張望毅糟。 院中可真熱鬧,春花似錦澜公、人聲如沸姆另。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迹辐。三九已至,卻和暖如春甚侣,著一層夾襖步出監(jiān)牢的瞬間明吩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工殷费, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留印荔,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓宗兼,卻偏偏與公主長得像躏鱼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子殷绍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容