gpt4 book ai didi

ios - 在 UICollectionViewCell 中添加带计时器的倒计时标签的最佳方法,即使在单元格被重用后也能正常工作

转载 作者:行者123 更新时间:2023-11-28 12:15:11 26 4
gpt4 key购买 nike

我有一个在 UICollectionView 中呈现给用户的项目列表。这些项目有一个倒计时标签,以显示该项目可用的剩余时间。我在 UICollectionViewCell 中使用了 Timer 来显示剩余时间,例如:

OperationQueue.main.addOperation {
var remaingTimeInterval = self.calculateRemainigTime(remainingTime: remainingTime)
if remaingTimeInterval > 0 {
self.timerLabel.isHidden = false
self.timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { [weak self] (_) in
let hours = Int(remaingTimeInterval) / 3600
let minutes = Int(remaingTimeInterval) / 60 % 60
let seconds = Int(remaingTimeInterval) % 60
self?.timerLabel?.text = String(format:"%02i:%02i:%02i", hours, minutes, seconds)
remaingTimeInterval -= 1
})
} else {
self.timer?.invalidate()
self.timerLabel.isHidden = true
}
}

这就是我根据给定日期计算剩余时间的方式:

//Calculating remaining time based on the item endDate and currentDAte
func calculateRemainigTime(remainingTime: String) -> Int {
let prizeRemainingTime = Helper.stringToDate(remainingTime)
let prizeRemainingTimeInterval = Int(prizeRemainingTime.timeIntervalSince1970)
let currentTimeInterval = Int(Date().timeIntervalSince1970)
return prizeRemainingTimeInterval - currentTimeInterval
}

在重新使用单元格之前一切正常,之后倒计时数字不再正确。

这是在 UICollectionViewCell 中显示倒计时的正确方法还是有更好的解决方案。

谁能帮我找到解决这个问题的方法?

最佳答案

  • 将计时器逻辑移至数据模型。
  • 不要使用目标/操作,而是使用 Timer 的基于 block 的 API。
  • cellForRow 中将计时器回调 block 传递给单元格。
  • 当计时器触发时,回调 block 中的代码可以更新单元格中的 UI。

关于ios - 在 UICollectionViewCell 中添加带计时器的倒计时标签的最佳方法,即使在单元格被重用后也能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46871799/

26 4 0