iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 17
0

讓我們實現在手機中產生 QRCode 的內容吧!

? 隕石小故事

這裡就有一個非常值得說的小故事了,原本以為一個需要金流的服務,會需要產生 QRCode 或其他條碼是一件算蠻正常的事情。但是,在隕石開發期間中發生了一件非常有趣的事情:

「 這邊使用者拿到 data 之後的產生的 QRCode 用途是? 」
-「 用在掃碼支付上的。」
「 可是有限制時間耶,然後離開畫面後也需要重新取得,這樣來得及掃描嗎?」
-「 喔喔,那是讓使用者自己掃碼支付就好的。 」
「 WTF? QRCode 不是在自己手機上嗎?怎麼掃?雙刀流嗎?」

雖然現在可能已經有方式和 QRCode 讀取器可以幫忙了,但就是需要在 APP 外額外做一些處理。像是上面的方式,倒不如直接透過 data 跳出個第三方支付的 APP 更簡單直接一點。

Overview

小故事說了這麼多,但是這次還是要來教大家如何在 iOS APP 中實現產生 QRCode 的方式。


實作

|產生 QRCode 內容

你大概可以在網路上找到相似的方式來產生 QRCode,通常會透過 CIFilter來產生,你可以使用不同的 filter 來產生不同的條碼:

而其中 filter 的 setValue 就是將我們轉換成 data 的資料存入 QRCode 中,並且將自身的 image 設定為 filter.outputImage。接著讓我們來看看畫面吧:

除了 inputMessage 之外,你也可以設置 inputCorrectionLevel,其用途是表示有多少額外的錯誤更正資料要被附加到輸出的 QRCode 圖片中。其 value 是 4 種字串之一:LMQH ,分別對應到不同的錯誤復原能力,依序為7%15%25%30%。數值越大,輸出的 QRCode 圖片也就越大,預設為 M

|修正模糊圖片

一開始使用 CIFilter 產生出來的 ciImage 可能會有模糊的狀況發生,所以我們還需將 ciImage 產生的 UIImage 縮放到 UIImageView 的大小才能高清顯示,我們使用 imageViewciImage 計算長寬的縮放比率,最後產生 transform 來達成縮放效果。

|額外補充

當然如果有對其他類型的條碼有興趣的話,可以參考這篇官方文章,裡面會提到各種不同條碼的設置參數以及其他設定。


Summary

那麼這次實作 QRCode 的教學就到這邊結束囉,這個功能在 iOS 上蠻容易就能夠實現的,希望有興趣的人也可以去玩玩其他種類的條碼,畢竟每個條碼的需求可能還是會碰到,而且每個條碼可以設置的東西也不同,先行踩雷 XDD。


上一篇
D16 - 滑出專屬於自己的密碼吧!
下一篇
D18 - Ctrl+C & Ctrl+V 複製大法
系列文
諸神黃昏下的 iOS 工程師31

尚未有邦友留言

立即登入留言