I have a swift struct:
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()
}
}
and a view controller:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var QRImage: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
According to this video
https://www.youtube.com/watch?v=bKOdFVirgU0
It will generate a qrcodeimage. How can I add this generated qrcodeimage to my view (QRImage) created in storyboard.
You can use the view by using UIHostingController. First, you need to import swiftUI in your viewcontroller as below:
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)
}
}
BTW, you need to set frame and filter key from your SwiftUI view. Becareful about the key-value name (case sensitive):
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()
}
}