Использование CADisplayLink в контроллере для запуска анимации в TableViewCells
Я смог получить CADisplayLink
запустить анимацию индикатора выполнения в TableViewCells
, Я написал всю анимацию в пользовательском файле ячейки. Вот код:
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
contentView.addSubview(timeRemainingView)
contentView.addSubview(testlabel)
contentView.bringSubviewToFront(testlabel)
contentView.backgroundColor = .white
let displayLink = CADisplayLink(target: self, selector: #selector(handleProgressAnimation))
displayLink.add(to: .main, forMode: .defaultRunLoopMode)
setupViews()
}
var animationDuration = 60.0 //Just initialization value
let animationStartDate = Date()
@objc func handleProgressAnimation() {
let currenttime = Date()
let elapsed = currenttime.timeIntervalSince(animationStartDate)
// do your animation logic here
let percentage = elapsed / animationDuration
timeRemainingView.frame.size.width = CGFloat(400 - (400 * percentage))
if (percentage >= 1 )
{
self.timeDurationCompleted()
}
}
Анимация работает хорошо, когда нет повторного использования ячейки.
Однако, когда я прокручиваю и ячейки используются повторно, анимация теряет свою актуальность. Я знаю, что такие таймеры должны быть реализованы в контроллере. Мне просто нужна помощь, как это сделать, когда у вас есть CADisplayLink
, каждый TableviewCell
имеет пользовательское время, которое я устанавливаю из cellforrow в контроллере:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellid, for: indexPath) as! listTableViewCell
cell.testlabel.text = "\(durationTime[indexPath.row])"
cell.animationDuration = Double(durationTime[indexPath.row])
return cell
}
durationTime - это просто целочисленный массив, который содержит все время в секундах.
Как я могу реализовать такую анимацию с таймером CADisplayLink от контроллера, чтобы преодолеть проблему повторного использования ячеек.