AppStorageデータを利用して作るバーコード生成のコード
今回は、アプリ内で各ユーザー固有のバーコードを生成したいので、AppStorageに格納した情報をもとに、バーコードを作るfunctionを作ってみた。
ほぼコピペで作ってるので、コードについてコメントできる内容は、ほとんどない。
ただ、Paul Hudsonのバーコード生成コードをコピペしてみたけど、うまく表示されなかった。最後のアウトプットのところが怪しい。
ちなみに下記がそのコード。
func generateBarcode(from string: String) -> UIImage? {
let data = string.data(using: String.Encoding.ascii)
if let filter = CIFilter(name: "CICode128BarcodeGenerator") {
filter.setValue(data, forKey: "inputMessage")
let transform = CGAffineTransform(scaleX: 3, y: 3)
if let output = filter.outputImage?.transformed(by: transform) {
return UIImage(ciImage: output)
}
}
return nil
}
let image = generateBarcode(from: "Hacking with Swift")
上記のコードでうまくバーコード出力できなかったので、下記のでやってみたら成功。ちなみに似たようなコードでQRコードの生成も可能。今回は、Barcode.
func generateBarcode(from string: String) -> UIImage? {
let context = CIContext()
let filter2 = CIFilter.code128BarcodeGenerator()
filter2.message = Data(string.utf8)
if let outputImage = filter2.outputImage {
if let cgimg = context.createCGImage(outputImage, from: outputImage.extent) {
return UIImage(cgImage: cgimg)
}
}
return UIImage(systemName: "xmark.circle") ?? UIImage()
}
下記をインポートするのも忘れずに。
import CoreImage
import CoreImage.CIFilterBuiltins
そして、もともとAppStorageに格納してある必要な数字情報を、呼び込む。
@State var savedpayid: String = UserDefaults.standard.string(forKey: "payid") ?? "0"
最後に、View内にアウトプットさせる。
Image(uiImage: generateBarcode(from: "\(savedpayid)")!)
最後のところのびっくりマーク「!」については、使わないほうが良いみたいだが、今回のところは、savedpayidが必ずあることを信じて使用。というか他の方法がよくわからないのもある。
一つずつのコードの意味や使い方をある程度しっかり理解して進んでいかないと、後で修正とかの場合、?となっちゃうので、基礎を学ぶ必要もある。気持ちは、早く結果を見たいのだが、集中、忍耐して、学んでいこう。
Reference:https://www.hackingwithswift.com/example-code/media/how-to-create-a-barcode
この記事が気に入ったらサポートをしてみませんか?