首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >imageView.image = UIImage(ciImage:)不会第二次更新

imageView.image = UIImage(ciImage:)不会第二次更新
EN

Stack Overflow用户
提问于 2022-02-24 16:53:16
回答 1查看 288关注 0票数 0

案例:我在视图中有一个UISwitch按钮。当开关关闭时,imageView将显示从字符串生成的QRCode映像。打开时,它将显示由字符串生成的条形码图像。我从https://www.hackingwithswift.com/复制了https://www.hackingwithswift.com/和条形码生成函数--它们正在运行良好的

问题是imageView第一次只显示生成的图像。在QRCode和条形码之间切换时,imageView将不再更新。我100%确信UISwitch正在工作,函数被调用并返回生成的映像。我已经测试了多次与断点和打印,功能是不返回零或空图像。

这里是QRCode生成代码

代码语言:javascript
复制
func generateQRCode(from string: String) -> UIImage? {
    let data = string.data(using: String.Encoding.ascii)

    if let filter = CIFilter(name: "CIQRCodeGenerator") {
        filter.setValue(data, forKey: "inputMessage")
        let transform = CGAffineTransform(scaleX: 3, y: 3)

        if let output = filter.outputImage?.transformed(by: transform) {
            return UIImage(ciImage: output) //<== it always returns this
        }
    }
    return nil
}

这里是条形码生成代码

代码语言:javascript
复制
func generateBarcode(from string: String) -> UIImage? {
    let data = string.data(using: String.Encoding.ascii)

    if let filter = CIFilter(name: "CICode128BarcodeGenerator") {
        filter.setValue(data, forKey: "inputMessage")
        let transform = CGAffineTransform(scaleX: 3, y: 3)

        if let output = filter.outputImage?.transformed(by: transform) {
            return UIImage(ciImage: output) //<== it always returns this
        }
    }
    return nil
}

这里是如何在QRCode和条形码之间切换,逻辑是正确的。

代码语言:javascript
复制
func toggleBarcode(isBarcode : Bool) {
    if isBarcode {
        qrImageView.image = generateBarcode(from: "Hacking with Swift")
    } else {
        qrImageView.image = generateQRCode(from: "Hacking with Swift")
    }
}

当测试的时候

代码语言:javascript
复制
qrImageView.image = UIImage(named: "myimage")

每次都管用。

imageView不只是用UIImage(ciImage:)更新

我甚至测试了几个不同版本的QR和条形码生成代码,它们都没有第二次更新imageView。

我试过了

代码语言:javascript
复制
qrImageView.setNeedsDisplay()

但没有运气。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-24 17:40:37

快速搜索..。似乎要么是“窃听器”,要么是变化..。

将生成器代码更改为此似乎纠正了以下问题:

代码语言:javascript
复制
func generateQRCode(from string: String) -> UIImage? {
    let data = string.data(using: String.Encoding.ascii)

    let context = CIContext()

    if let filter = CIFilter(name: "CIQRCodeGenerator") {
        filter.setValue(data, forKey: "inputMessage")
        let transform = CGAffineTransform(scaleX: 3, y: 3)
        
        if let output = filter.outputImage?.transformed(by: transform) {
            if let retImg = context.createCGImage(output, from: output.extent) {
                return UIImage(cgImage: retImg)
            }
        }
    }
    return nil
}

func generateBarcode(from string: String) -> UIImage? {
    let data = string.data(using: String.Encoding.ascii)

    let context = CIContext()

    if let filter = CIFilter(name: "CICode128BarcodeGenerator") {
        filter.setValue(data, forKey: "inputMessage")
        let transform = CGAffineTransform(scaleX: 3, y: 3)
        
        if let output = filter.outputImage?.transformed(by: transform) {
            if let retImg = context.createCGImage(output, from: output.extent) {
                return UIImage(cgImage: retImg)
            }
        }
    }
    return nil
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71255508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档