実装方法
import SwiftUI
import CoreImage.CIFilterBuiltins
struct ContentView: View {
// QRコードに変換するURL文字列
private let urlString = "<#遷移先のURL#>"
var body: some View {
VStack {
Text("QRコードだよ")
// QRコード画像が生成できた場合、それを表示
if let qrCodeImage = generateQRCode(from: urlString) {
Image(uiImage: qrCodeImage)
.interpolation(.none) // 画像の補間を無効にする(ぼやけ防止)
.resizable()
.frame(width: 200, height: 200)
} else {
// QRコードが生成できなかった場合のエラーメッセージ
Text("Failed to generate QR Code")
}
}
}
private func generateQRCode(from urlString: String) -> UIImage? {
// URL文字列をUTF-8形式のデータに変換
let data = Data(urlString.utf8)
// QRコードを生成するフィルター(Core Imageの機能)
let filter = CIFilter.qrCodeGenerator()
// 生成するQRコードにデータを設定("inputMessage"というキーを使用)
filter.setValue(data, forKey: "inputMessage")
if let ciImage = filter.outputImage {
// 生成されたQRコードが小さいため、拡大する(10倍に拡大)
let transform = CGAffineTransform(scaleX: 10, y: 10)
let scaledCIImage = ciImage.transformed(by: transform)
let context = CIContext()
if let cgImage = context.createCGImage(scaledCIImage, from: scaledCIImage.extent) {
return UIImage(cgImage: cgImage)
}
}
// QRコード生成に失敗した場合はnilを返す
return nil
}
}