CIQRCodeGenerator在CIFilter中出现问题

时间:2018-06-18 09:48:31

标签: ios swift ios12

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

3 个答案:

答案 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”)