我正在更新现有应用以支持iOS 12,并出现CIFilter
的奇怪问题。
这是一个简单的类,有一个函数generate()
:
class QRGenerator {
static func generate(from string: String) -> UIImage? {
let context = CIContext()
let data = string.data(using: String.Encoding.ascii)
if let filter = CIFilter(name: "CIQRCodeGenerator") {
filter.setValue(data, forKey: "inputMessage")
let transform = CGAffineTransform(scaleX: 7, y: 7)
if let output = filter.outputImage?.transformed(by: transform), let cgImage = context.createCGImage(output, from: output.extent) {
return UIImage(cgImage: cgImage)
}
}
return nil
}
}
这个课程完美地运行到iOS 12.现在排在if let filter = CIFilter(name: "CIQRCodeGenerator")
行我总是收到零。
我花了一些时间在Apple文档上,但没有找到有关此问题的任何有用信息。
答案 0 :(得分:1)
这也发生在我身上,我也尝试使用QRcode https://github.com/aschuch/QRCode之类的外部库生成QR,但是QR的图像始终为零。
当我在Xcode 10.0 beta 2中的iOS 12.0(16A5308d)模拟器中安装该应用程序时,它为零。
但是,当我通过相同的Xcode(10.0 beta 2)将它安装在具有iOS 12 beta 4(16A5339e)的物理设备iPhone SE中时,生成QR完全没有问题。
我还尝试了从相同的Xcode(10.0 beta 2)和iOS 11.4(15F79)仿真的iPhone SE,并且运行完美。
答案 1 :(得分:0)
我对CIFilters
知之甚少,但您可能尝试获取所有可能的过滤器名称:
let allFiltersNames = CIFilter.filterNames(inCategories: nil)
我无法发现与CIQRCodeGenerator
匹配的内容,但可能会有其他名称符合您需求的其他过滤器。
答案 2 :(得分:0)
在Swift 5中
class QRGenerator {
static func generate(from string: String) -> UIImage? {
let data = string.data(using: .ascii, allowLossyConversion: false)
let filter = CIFilter(name: "CIQRCodeGenerator")
filter?.setValue(data, forKey: "inputMessage")
return UIImage(ciImage: (filter?.outputImage)!)
}
}
调用此功能
myImageView.image = QRGenerator.generate(来自:“ Stackoverflow”)