gpt4 book ai didi

swift - 如何更正自定义单元格中计时器倒计时中数字的跳过?

转载 作者:行者123 更新时间:2023-11-28 10:03:38 25 4
gpt4 key购买 nike

为了在我的每个 tableView 单元格中一致地实现倒数计时器(倒计时音频的录制时间),我在名为“createStoryCell”的自定义单元格中放置了一个计时器,该计时器在“countDownTime”时触发已设置。

class CreateStoryCell: UITableViewCell {

weak var delegate: createStoryCellDelegate?
var countDownTimer : Timer?

var countDownTime : Double! {
didSet {
startTimer()
}
}

func startTimer() {

countDownTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { (countDownTimer) in

if self.countDownTime > 0.0 {
self.countDown.isHidden = false
self.countDownTime = self.countDownTime - 1.0
self.countDown.text = String(self.countDownTime)
} else {
countDownTimer.invalidate()
}
}
}
}

为了设置 countDownTime,我在 viewController 的“cellForRowAt”中使用了以下代码。

if storyItem?.isRecording == false {
cell.record.setImage(UIImage(named: "smallMicBtn"), for: .normal)
cell.countDown.isHidden = true
} else {
cell.countDownTime = 5.0
cell.record.setImage(UIImage(named: "recordStop"), for: .normal)
}

但是,当我运行倒数计时器时,它会跳过仅输出 4...2...0 的数字。对于如何避免跳过 3 和 1 的任何建议,我将不胜感激。我已经尝试将 'self.countDown.text = String(self.countDownTime)' 包装在 dispatchQueue.main.async 中,但使用相同的方法结果。在此先感谢您的指点。

最佳答案

这个

didSet {
startTimer()
}

在这里触发 countDownTime 的每次更改

self.countDownTime = self.countDownTime - 1.0

你不应该使用 didSet ,让它成为一个方法并从 CellForRowAt 调用它一次


还请注意,单元格已出列,因此在 CellForRowAt 中的这一行之后执行

let cell  = ///
cell.countDownTimer?.invalidate()

如果用户滚动

关于swift - 如何更正自定义单元格中计时器倒计时中数字的跳过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57144608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com