swift4.0 掃一掃功能 代碼

最近在做一個(gè)swift項(xiàng)目 要寫掃一掃功能 上網(wǎng)找的代碼基本都是3.0以前的 一用全都是錯的

下面把最近的代碼記錄一下, 由于時(shí)間緊迫,只放上功能代碼

func setupScanSession(){

do{

//設(shè)置捕捉設(shè)備

guard let device = AVCaptureDevice.default(for: AVMediaType.video) else {

Tool.confirm(title: "溫馨提示", message: "未得到攝像頭", controller: self)

return

}

//設(shè)置設(shè)備輸入輸出

let input = try AVCaptureDeviceInput(device: device)

let output = AVCaptureMetadataOutput()

output.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)

//設(shè)置會話

captureSession.canSetSessionPreset(AVCaptureSession.Preset.high)

if captureSession.canAddInput(input){

captureSession.addInput(input)

}

if captureSession.canAddOutput(output){

captureSession.addOutput(output)

}

//設(shè)置掃描類型(二維碼和條形碼)

output.metadataObjectTypes = [

AVMetadataObject.ObjectType.qr,

AVMetadataObject.ObjectType.code39,

AVMetadataObject.ObjectType.code128,

AVMetadataObject.ObjectType.code39Mod43,

AVMetadataObject.ObjectType.ean13,

AVMetadataObject.ObjectType.ean8,

AVMetadataObject.ObjectType.code93]

//預(yù)覽圖層

let scanPreviewLayer = AVCaptureVideoPreviewLayer(session:captureSession)

scanPreviewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill

scanPreviewLayer.frame = view.layer.bounds

cameraView.layer.insertSublayer(scanPreviewLayer, at: 0)

//設(shè)置掃描區(qū)域

NotificationCenter.default.addObserver(forName: NSNotification.Name.AVCaptureInputPortFormatDescriptionDidChange, object: nil, queue: nil, using: { (noti) in

output.rectOfInterest = (scanPreviewLayer.metadataOutputRectConverted(fromLayerRect: self.scanPane.frame))

})

//保存會話

captureSession.startRunning()

} catch {

//攝像頭不可用

Tool.confirm(title: "溫馨提示", message: "攝像頭不可用", controller: self)

return

}

}

//開始掃描viewWillAppear中調(diào)用就行

func scannerStart(){

captureSession.startRunning()

}

func scannerStop() {

captureSession.stopRunning()

}

/// 實(shí)現(xiàn)代理方法

//注意這個(gè)代理方法的名字變了!!!不要只用了上面的代碼 發(fā)現(xiàn)不走代理 我就被坑了

extension ScannerViewController: AVCaptureMetadataOutputObjectsDelegate {

func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {

if metadataObjects.count > 0 {

//? ? ? ? ? ? scanSession?.stopRunning()

scannerStop()

let object = metadataObjects[0]

let string: String = (object as AnyObject).stringValue

if let url = URL(string: string) {

if UIApplication.shared.canOpenURL(url) {

//去打開地址鏈接,這是一個(gè)自定義的webView

let result = WebViewController()

result.url = string;

result.hidesBottomBarWhenPushed = true;

self.navigationController?.pushViewController(result, animated: true)

} else {

//獲取非鏈接結(jié)果

let alertViewController = UIAlertController(title: "掃描結(jié)果", message: (object as AnyObject).stringValue, preferredStyle: .alert)

let actionCancel = UIAlertAction(title: "退出", style: .cancel, handler: { (action) in

_ = self.navigationController?.popViewController(animated: true)

})

let actinSure = UIAlertAction(title: "再次掃描", style: .default, handler: { (action) in

self.scannerStart()

})

alertViewController.addAction(actionCancel)

alertViewController.addAction(actinSure)

self.present(alertViewController, animated: true, completion: nil)

}

}

}

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末通殃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子亥曹,更是在濱河造成了極大的恐慌邓了,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件媳瞪,死亡現(xiàn)場離奇詭異骗炉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蛇受,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門句葵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人兢仰,你說我怎么就攤上這事乍丈。” “怎么了把将?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵轻专,是天一觀的道長。 經(jīng)常有香客問我察蹲,道長请垛,這世上最難降的妖魔是什么催训? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮宗收,結(jié)果婚禮上漫拭,老公的妹妹穿的比我還像新娘。我一直安慰自己混稽,他們只是感情好采驻,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匈勋,像睡著了一般礼旅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洽洁,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天各淀,我揣著相機(jī)與錄音,去河邊找鬼诡挂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛临谱,可吹牛的內(nèi)容都是我干的璃俗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼悉默,長吁一口氣:“原來是場噩夢啊……” “哼城豁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抄课,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤唱星,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后跟磨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體间聊,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年抵拘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哎榴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡僵蛛,死狀恐怖尚蝌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情充尉,我是刑警寧澤飘言,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站驼侠,受9級特大地震影響姿鸿,放射性物質(zhì)發(fā)生泄漏谆吴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一般妙、第九天 我趴在偏房一處隱蔽的房頂上張望纪铺。 院中可真熱鬧,春花似錦碟渺、人聲如沸鲜锚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芜繁。三九已至,卻和暖如春绒极,著一層夾襖步出監(jiān)牢的瞬間骏令,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工垄提, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留榔袋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓铡俐,卻偏偏與公主長得像凰兑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子审丘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

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

  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 3,845評論 0 6
  • 1吏够、設(shè)置UILabel行間距 NSMutableAttributedString* attrString = [[...
    十年一品溫如言1008閱讀 1,663評論 0 3
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,748評論 0 33
  • 二十幾日滩报,能時(shí)常念叨分享的锅知,不是那些標(biāo)志性的大景區(qū),而是還保留著原生味道的一些景致脓钾,還有就是幾位僅是一面之...
    水妮兒閱讀 689評論 2 2
  • 第一次感覺到父親老去可训,是在大學(xué)期間侣姆,他操心妹妹的婚事。 第一次感覺到母親的老去沉噩,是在父親發(fā)生意外住院捺宗。 父親的老去...
    書青麥閱讀 498評論 0 1