我有一个旋转的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时,这些单元格消失了,然后再次滚动显示它们时,它们的动画就会停止。重新出现后,我尝试再次为他们调用该方法,但没有成功。我的代码有什么问题?
答案 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)
}