關(guān)于iOS二維碼掃描焦距及位置

? ? 對(duì)于開發(fā)人員空入,即便資深老前輩也可能會(huì)出現(xiàn)沒用過而短時(shí)間內(nèi)解決不了的問題族檬。今天我就遇到過求助了好幾個(gè)大神都沒能解決化戳。而且在網(wǎng)上找了半天才找到点楼。

先說下情況:公司三年老項(xiàng)目看著好壞參半的代碼頭疼的事就不說了。目前公司需求是二維碼掃描效果不是很好换怖,主要就是焦距問題蟀瞧。讓我以微信作為參考。以前我也沒去注意到铸屉,打開微信掃一掃的同時(shí)打開了我們項(xiàng)目的掃一掃對(duì)比了下結(jié)果

以下是設(shè)置相機(jī)單獨(dú)抽出來的代碼

- (void)setupCamera

{

captureDevice= [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];// Device

captureInput= [AVCaptureDeviceInputdeviceInputWithDevice:captureDeviceerror:nil];// Input

captureOutput= [[AVCaptureMetadataOutputalloc]init];// Output

[captureOutputsetMetadataObjectsDelegate:selfqueue:dispatch_get_main_queue()];

captureSession= [[AVCaptureSessionalloc]init];// Session

[captureSessionsetSessionPreset:AVCaptureSessionPresetHigh];

if([captureSessioncanAddInput:captureInput])

{

[captureSessionaddInput:captureInput];

}

if([captureSessioncanAddOutput:captureOutput])

{

[captureSessionaddOutput:captureOutput];

}

//條碼類型AVMetadataObjectTypeQRCode

captureOutput.metadataObjectTypes=@[

AVMetadataObjectTypeQRCode,

AVMetadataObjectTypeUPCECode,

AVMetadataObjectTypeEAN8Code,

AVMetadataObjectTypeEAN13Code,

AVMetadataObjectTypeAztecCode,

AVMetadataObjectTypeCode39Code,

AVMetadataObjectTypeCode93Code,

AVMetadataObjectTypePDF417Code,

AVMetadataObjectTypeCode128Code,

AVMetadataObjectTypeCode39Mod43Code,

];

dispatch_async(dispatch_get_main_queue(), ^{

//更新界面

capturePreview=[AVCaptureVideoPreviewLayerlayerWithSession:captureSession];

capturePreview.videoGravity=AVLayerVideoGravityResizeAspectFill;

capturePreview.frame=self.view.bounds;

// Start

[captureSessionstartRunning];

});

}

此時(shí)只需要將試圖layer層放大就可以完成效果:

[capturePreviewsetAffineTransform:CGAffineTransformMakeScale(1.5,1.5)];

需注意代碼的順序顷啼。給layer層設(shè)置frame的代碼后放大昌屉。否則你會(huì)看到漆黑一片。

(后期插入補(bǔ)充):這段是測(cè)試人員發(fā)現(xiàn)的bug仪搔,由于上面將相機(jī)可視的layer層放大后導(dǎo)致超出控制器的view蜻牢。此時(shí)在處理完掃描事件結(jié)果會(huì)退出當(dāng)前掃描控制器抢呆。仔細(xì)看會(huì)發(fā)現(xiàn)控制器退出時(shí)卡在一半零點(diǎn)幾秒后再完全退出。(與之前的版本進(jìn)行對(duì)比)昌阿。此時(shí)修剪下capturePreview就行:

self.view.clipsToBounds=YES;

self.view.layer.masksToBounds=YES;

另一個(gè)問題:當(dāng)你變形放大展示的layer層后二維碼在可視界面之外也是可以進(jìn)行掃描獲取恳邀,于是乎我了解到將layer層的變大但是執(zhí)行任務(wù)還是以整個(gè)layer大小來掃描執(zhí)行谣沸。需要設(shè)置一個(gè)屬性setRectOfInterest,他是攝像中AVCaptureMetadataOutput類的一個(gè)屬性内地,他是通過一個(gè)CGRect來設(shè)置赋除,但是有兩點(diǎn):1、它是橫屏情況下的frame所以寬高和XY值需反向操作荆针。就是按照豎屏模式應(yīng)該將原先是XYWH要改為YXHW來設(shè)置。2秸妥、它是一個(gè)比例值以00開始為原點(diǎn)最大比例寬高為11(既全屏掃描情況下CGRect的寫法為(0沃粗,0最盅,1,1))涡贱。而且最大比例不是以手機(jī)尺寸比例问词,而是由capturePreview這個(gè)layer層為總比例。這也說明了為什么你能掃描超出屏幕尺寸外的二維碼信息內(nèi)容辰狡。

此處的scanCropRect接收了上面已設(shè)置好的中間掃描框的frame

CGFloat scanCropRectX = (capturePreview.frame.size.height - scanCropRect.size.height)/2;

CGFloat scanCropRectY = (capturePreview.frame.size.width - scanCropRect.size.width)/2;

//調(diào)整掃描位置

[captureOutputsetRectOfInterest:CGRectMake( scanCropRectX,scanCropRectY,scanCropRect.size.height/ capturePreview.frame.size.height ,scanCropRect.size.width/ capturePreview.frame.size.width )];

終于解決了掃描位置的問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宛篇,一起剝皮案震驚了整個(gè)濱河市叫倍,隨后出現(xiàn)的幾起案子豺瘤,更是在濱河造成了極大的恐慌,老刑警劉巖蚕泽,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赛糟,死亡現(xiàn)場離奇詭異砸逊,居然都是意外死亡掌逛,警方通過查閱死者的電腦和手機(jī)豆混,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盒粮,“玉大人奠滑,你說我怎么就攤上這事摊崭》ν停” “怎么了啸箫?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長扎唾。 經(jīng)常有香客問我南缓,道長,這世上最難降的妖魔是什么汉形? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任纸镊,我火速辦了婚禮,結(jié)果婚禮上概疆,老公的妹妹穿的比我還像新娘逗威。我一直安慰自己,他們只是感情好岔冀,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布凯旭。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪罐呼。 梳的紋絲不亂的頭發(fā)上鞠柄,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音嫉柴,去河邊找鬼。 笑死计螺,一個(gè)胖子當(dāng)著我的面吹牛夯尽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播危尿,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼呐萌,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了谊娇?” 一聲冷哼從身側(cè)響起肺孤,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎济欢,沒想到半個(gè)月后赠堵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡法褥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年茫叭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片半等。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡揍愁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杀饵,到底是詐尸還是另有隱情莽囤,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布切距,位于F島的核電站朽缎,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谜悟。R本人自食惡果不足惜话肖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葡幸。 院中可真熱鬧最筒,春花似錦、人聲如沸礼患。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缅叠。三九已至悄泥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肤粱,已是汗流浹背弹囚。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留领曼,地道東北人鸥鹉。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像庶骄,于是被迫代替她去往敵國和親毁渗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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

  • 本文介紹的是系統(tǒng)自帶的二維碼掃描!方便簡單實(shí)用羔飞。-----話不多說肺樟,直接上干貨! 三步就搞定B咛省C床!?ㄈ濉L锶帷!骨望! ...
    zhangyajie閱讀 1,207評(píng)論 8 2
  • 一硬爆、前言 最近在做一個(gè)關(guān)于掃描二維碼簽到的小東西,所以還是上來寫一篇關(guān)于二維碼的文章锦募,網(wǎng)上也有一些掃描二維碼的框架...
    kim逸云閱讀 4,421評(píng)論 2 8
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果摆屯,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜,今天將帶大家一窺ios動(dòng)畫全貌糠亩。在這里你可以看...
    每天刷兩次牙閱讀 8,514評(píng)論 6 30
  • 昨天收到一個(gè)需求要給項(xiàng)目增加一個(gè)二維碼掃描的功能虐骑,然后就找了一些AVFoundation的資料拼拼湊湊把功能完成了...
    CharmingLee閱讀 836評(píng)論 3 0
  • # 掃描二維碼 ### 以下是.m文件的完整代碼 #import "ScanViewController.h"#d...
    gao_smile閱讀 386評(píng)論 0 0