我有一个旋转的UIView来显示UITableView的每个单元格中的进度,我使用此函数来设置UIView的动画:

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时,单元格将消失,然后通过再次滚动显示,它们的动画将停止。我再次出现后试图为他们调用该方法,但没有成功。我的代码怎么了?

最佳答案

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

关于swift - 当滚动UITableView时再次出现UIView时,动画停止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54356406/

10-09 12:26