Анимация останавливается, когда снова появляется UIView при прокрутке UITableView - PullRequest
0 голосов
/ 25 января 2019

У меня есть вращающийся UIView, чтобы показать прогресс в каждой ячейке UITableView, и я использую эту функцию для анимации UIViews:

func rotate360Degrees(duration: CFTimeInterval = 1.0) {
    let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation")
    rotateAnimation.fromValue = 0.0
    rotateAnimation.toValue = CGFloat.pi * 2
    rotateAnimation.duration = duration
    rotateAnimation.repeatCount = Float.infinity
    self.layer.add(rotateAnimation, forKey: nil)
}

Он отлично работает, когда ячейки появляются первыми, но когда вы прокручиваете UITableViewи ячейки исчезают, и после этого они снова появляются при прокрутке, их анимация останавливается.Я попытался вызвать метод для них снова после появления, но это не сработало.что не так с моим кодом?

1 Ответ

0 голосов
/ 25 января 2019

UITableViewCell объекты можно использовать повторно, и вам нужно восстановить анимацию в prepareForReuse: или tableView (_: willDisplay: forRowAt:) метод.

func getRotate360DegreesAnimation(duration: CFTimeInterval = 1.0) -> CABasicAnimation {
    let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation")
    rotateAnimation.fromValue = 0.0
    rotateAnimation.toValue = .pi * 2
    rotateAnimation.duration = duration
    rotateAnimation.repeatCount = .infinity
    return rotateAnimation
}

func restoreAnimation() {
    let animation = getRotate360DegreesAnimation()
    layer.removeAllAnimations()
    layer.add(animation, forKey: nil)
}
...