5

我正在更新现有应用程序以支持 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 文档上花了一些时间,但没有找到有关此问题的任何有用信息。

4

3 回答 3

1

它也发生在我身上,我也尝试使用外部库(如 QRcode https://github.com/aschuch/QRCode )生成 QR,但 QR 的图像始终为零。

当我从 Xcode 10.0 beta 2 在带有 iOS 12.0 (16A5308d) 的模拟器中安装应用程序时,它为零。

但是,当我将它安装在具有 iOS 12 beta 4 (16A5339e) 的物理设备 iPhone SE 中时,使用相同的 Xcode(10.0 beta 2),生成的 QR 完全没有问题。

我还尝试使用来自相同 Xcode(10.0 beta 2)的带有 iOS 11.4(15F79)的模拟 iPhone SE,并且效果很好。

于 2018-08-01T22:44:12.507 回答
1

在斯威夫特 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”)

于 2020-11-22T15:59:53.297 回答
0

我对 知之甚少CIFilters,但也许您可以尝试获取所有可能的过滤器名称:

let allFiltersNames = CIFilter.filterNames(inCategories: nil)

我找不到与之匹配CIQRCodeGenerator的过滤器,但可能还有其他名称不同的过滤器可以满足您的需求。

于 2018-06-18T11:05:17.510 回答