swift - 将生成器添加到项目
问题描述
我有一个快速的结构:
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) 中。
解决方案
您可以使用 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()
}
}
推荐阅读
- reactjs - React-native-maps 未在 iOS 上显示谷歌地图样式
- c++ - 如何编写用于在 C++14 中调用 Fortran 函数的通用包装器(按引用调用 --> 按值调用)
- coq - 战术:filter_exercise
- python - 通过循环 df 内的簇来显示堆叠直方图
- python - 如何使用 Python 从受保护的画布元素中获取图像?
- angular - Angular Universal:添加服务工作者不允许页面的特定标题
- linux - 如何实现类似于“truncateat”的东西?
- vb.net - 索引值列表 VB.Net
- android - 协程 - 单元测试 viewModelScope.launch 方法
- sql-server - 如果在最后一分钟内插入了行,则执行存储过程