我有一个旋转的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/