当滚动UITableView时再次出现UIView时,动画停止

时间:2019-01-24 22:37:59

标签: swift uiview uikit core-animation

我有一个旋转的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 :(得分:1)

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)
}