首页 > 解决方案 > 将生成器添加到项目

问题描述

我有一个快速的结构:

import Foundation
import SwiftUI
import CoreImage.CIFilterBuiltins

    struct Qrview : View {
        let context = CIContext()
        let filter = CIFilter.qrCodeGenerator()
        var url : String
        
        var body: some View {
            Image(uiImage: genearteQrcodeimage(url: url))
        }
        func genearteQrcodeimage(url : String) -> UIImage {
            let data = Data(url.utf8)
            filter.setValue(data, forKey: "Inputmessage")
            if let qrcodeImage = filter.outputImage {
                if let qrcodeImage  = context.createCGImage(qrcodeImage, from: qrcodeImage.extent){
                    return UIImage(cgImage: qrcodeImage)
                    
                }
            }
            return UIImage(systemName: "mark") ?? UIImage()
        }
    }

和一个视图控制器:

import UIKit


    class ViewController: UIViewController {
        @IBOutlet weak var QRImage: UIView!
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
        
        }
    
    
    }

根据这个视频

https://www.youtube.com/watch?v=bKOdFVirgU0

它将生成一个 qrcodeimage。如何将此生成的 qrcodeimage 添加到我在情节提要中创建的视图 (QRImage) 中。

标签: swiftstoryboardqr-code

解决方案


您可以使用 UIHostingController 来使用视图。首先,您需要在视图控制器中导入 swiftUI,如下所示:

import UIKit
import SwiftUI

class EventsViewController: UIViewController {

    @IBOutlet weak var QRImage: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Example of use
        let childView = UIHostingController(rootView: Qrview(url: "www.google.com"))
        addChild(childView)
        childView.view.frame = QRImage.bounds
        QRImage.addSubview(childView.view)
        childView.didMove(toParent: self)
    }

}

顺便说一句,您需要从 SwiftUI 视图中设置框架和过滤键。注意键值名称(区分大小写):

filter.setValue(data, forKey: "inputMessage")

import Foundation
import SwiftUI
import CoreImage.CIFilterBuiltins

    struct Qrview : View {
        let context = CIContext()
        let filter = CIFilter.qrCodeGenerator()
        var url : String
        
        var body: some View {
            Image(uiImage: genearteQrcodeimage(url: url))
                .resizable().frame(width: 200, height: 200, alignment: .center)
        }
        func genearteQrcodeimage(url : String) -> UIImage {
            let data = Data(url.utf8)
            filter.setValue(data, forKey: "inputMessage")
            if let qrcodeImage = filter.outputImage {
                if let qrcodeImage  = context.createCGImage(qrcodeImage, from: qrcodeImage.extent){
                    return UIImage(cgImage: qrcodeImage)
                    
                }
            }
            return UIImage(systemName: "mark") ?? UIImage()
        }
    }

这是输出: 在此处输入图像描述


推荐阅读