Dev-iOS/SwiftUI

[SwiftUI] QR 코드 만들기

lafortune 2024. 5. 29. 22:03
반응형

1. QR 코드 생성 뷰 만들기

먼저, QRCodeView라는 뷰를 만들고 사용자가 입력한 텍스트를 QR 코드로 변환하는 방법을 살펴보겠습니다. QR 코드를 생성하기 위해 CoreImage 프레임워크를 사용하며, CIFilter를 활용해 QR 코드를 생성합니다.

1.1 기본 뷰 구조

다음은 기본 뷰 구조입니다. QRCodeView는 사용자가 텍스트를 입력하고, 해당 텍스트를 QR 코드로 변환하여 화면에 보여줍니다.


import SwiftUI
import CoreImage.CIFilterBuiltins

struct QRCodeView: View {
    @State private var text: String = ""

    var body: some View {
        VStack {
            Text("Enter text to generate QR Code")
                .font(.headline)

            TextField("Enter text", text: $text)
                .textFieldStyle(RoundedBorderTextFieldStyle())
                .padding()

            if let qrImage = generateQRCode(from: text) {
                Image(uiImage: qrImage)
                    .interpolation(.none)
                    .resizable()
                    .frame(width: 200, height: 200)
            } else {
                Text("Invalid input")
                    .foregroundColor(.red)
            }

            Spacer()
        }
        .padding()
    }

    func generateQRCode(from string: String) -> UIImage? {
        let data = string.data(using: String.Encoding.ascii)
        if let filter = CIFilter(name: "CIQRCodeGenerator") {
            filter.setValue(data, forKey: "inputMessage")
            let transform = CGAffineTransform(scaleX: 10, y: 10)
            if let output = filter.outputImage?.transformed(by: transform),
               let cgimg = CIContext().createCGImage(output, from: output.extent) {
                return UIImage(cgImage: cgimg)
            }
        }
        return nil
    }
}
    

1.2 코드 설명

  • 텍스트 필드: 사용자가 입력한 텍스트를 @State 변수를 사용하여 관리합니다.
  • QR 코드 생성 함수: generateQRCode 함수는 입력된 문자열을 QR 코드 이미지로 변환합니다.
  • QR 코드 이미지 표시: 생성된 QR 코드는 Image 뷰를 통해 화면에 표시됩니다. QR 코드가 유효하지 않으면 "Invalid input" 메시지를 출력합니다.

2. 예제와 화면 구성

2.1 예제 코드


import SwiftUI
import CoreImage.CIFilterBuiltins

struct QRCodeView: View {
    @State private var text: String = ""

    var body: some View {
        VStack {
            Text("Enter text to generate QR Code")
                .font(.headline)

            TextField("Enter text", text: $text)
                .textFieldStyle(RoundedBorderTextFieldStyle())
                .padding()

            if let qrImage = generateQRCode(from: text) {
                Image(uiImage: qrImage)
                    .interpolation(.none)
                    .resizable()
                    .frame(width: 200, height: 200)
            } else {
                Text("Invalid input")
                    .foregroundColor(.red)
            }

            Spacer()
        }
        .padding()
    }

    func generateQRCode(from string: String) -> UIImage? {
        let data = string.data(using: String.Encoding.ascii)
        if let filter = CIFilter(name: "CIQRCodeGenerator") {
            filter.setValue(data, forKey: "inputMessage")
            let transform = CGAffineTransform(scaleX: 10, y: 10)
            if let output = filter.outputImage?.transformed(by: transform),
               let cgimg = CIContext().createCGImage(output, from: output.extent) {
                return UIImage(cgImage: cgimg)
            }
        }
        return nil
    }
}

struct QRCodeView_Previews: PreviewProvider {
    static var previews: some View {
        QRCodeView()
    }
}
    

2.2 화면 예시

위 코드를 실행하면 다음과 같은 화면을 확인할 수 있습니다.

  • 텍스트 입력 필드: 사용자가 텍스트를 입력할 수 있는 필드가 표시됩니다.
  • QR 코드 이미지: 사용자가 텍스트를 입력하면 해당 텍스트가 QR 코드로 변환되어 이미지로 표시됩니다.
  • 잘못된 입력 처리: 유효하지 않은 입력이 있을 경우, 에러 메시지를 표시합니다.

 

4. 참고 및 중요 사항

참고: QR 코드 생성 시 ASCII 인코딩을 사용하여 텍스트 데이터를 변환합니다. 이는 QR 코드의 표준 인코딩 방식 중 하나입니다.
중요: QR 코드 이미지를 생성할 때, 이미지의 크기를 조정하여 적절한 해상도로 표시하도록 합니다. 이는 QR 코드 스캐너가 코드를 쉽게 인식할 수 있도록 도와줍니다.

여러분도 위의 예제 코드를 따라해 보면서 SwiftUI의 강력한 기능을 활용해 보세요!

 
반응형