Xcode-图像视图不改变

问题描述 投票:0回答:1

我试图使用for循环更新一个UIImageView,然而,图像只在循环的最后一次迭代时才显示出来。这段代码的目的是显示一个二维码,等待4秒,然后显示不同的二维码,但是它只显示最后一个二维码。

            for record in 1...importedrecords.count-3 {
            let qrCode = importedrecords[record][0] + " " + importedrecords[record][1] + " " + importedrecords[record][7]
            print("QR Code is: " + qrCode)

            let data = qrCode.data(using: .ascii, allowLossyConversion: false)
            let filter = CIFilter(name: "CIQRCodeGenerator")
            filter?.setValue(data, forKey: "InputMessage")

            let ciImage = filter?.outputImage

            let transform = CGAffineTransform(scaleX: 10, y: 10)
            let transformImage = ciImage?.transformed(by: transform)

            let image = UIImage(ciImage: transformImage!)
            self.myImageView.image = image

            do {
                sleep(4)
            }
        }
ios swift xcode uiimageview
1个回答
0
投票

我建议使用 Timer 为此。使用 sleep 不建议使用,尤其是在主线程上,因为它会停止所有正在进行的工作。

    var timer: Timer?
    var recordIndex = 0
    var importedRecords = [[String]]()

    // Call this when you want to start updating
    func startUpdate() {
        timer = Timer.scheduledTimer(timeInterval: 4, target: self, selector:#selector(updateQR), userInfo: nil, repeats: true)
    }

    // Call this when you want to stop and reset updating
    func stopUpdate() {
        timer?.invalidate()
        recordIndex = 0
    }

    @objc
    func updateQR() {
        let qrCode = importedRecords[recordIndex][0] + " " + importedRecords[recordIndex][1] + " " + importedRecords[recordIndex][7]
        print("QR Code is: " + qrCode)

        let data = qrCode.data(using: .ascii, allowLossyConversion: false)
        let filter = CIFilter(name: "CIQRCodeGenerator")
        filter?.setValue(data, forKey: "InputMessage")

        let ciImage = filter?.outputImage
        let transform = CGAffineTransform(scaleX: 10, y: 10)
        let transformImage = ciImage?.transformed(by: transform)

        let image = UIImage(ciImage: transformImage!)
        myImageView.image = image

        // This will prevent out of bounds crash
        if recordIndex < importedRecords.count {
            recordIndex += 1
        } else {
            stopUpdate()
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.