我有一个动画的进度圈。我可以按下一个按钮,它的动画效果为20%,如果再次按下该按钮,它的动画效果为40%。我将isRemovedOnCompletion
设置为false
。但是,每次执行动画时,都会将新动画添加到CAShapelayer
中。我想这对性能不好。有更好的方法吗?
虚拟代码:
@IBAction func didTapAnimate(_ sender: Any) {
let animateStroke = CABasicAnimation(keyPath: "strokeEnd")
animateStroke.fromValue = index > 0 ? progressPts[index - 1] : 0
animateStroke.toValue = progressPts[index]
animateStroke.duration = 2.0
animateStroke.fillMode = .forwards
animateStroke.isRemovedOnCompletion = false
circleLayer.add(animateStroke, forKey: "MyAnimation")
index+=1
}
答案 0 :(得分:2)
我认为无需删除先前的动画,因为据我所知,只有一个动画层用于单个键,因此动画会自动替换为先前的动画。
一个标识动画的字符串。每个唯一动画只有一个动画 密钥已添加到图层。特殊密钥kCATransition为 自动用于过渡动画。您可以指定nil为 此参数。
因此,只有最后一个动画会占用内存,而先前的动画会自动释放。
答案 1 :(得分:0)
只需调用removeAnimation(forKey:"yourkey")
@IBAction func didTapAnimate(_ sender: Any) {
circleLayer.removeAnimation(forKey: "MyAnimation")
let animateStroke = CABasicAnimation(keyPath: "strokeEnd")
animateStroke.fromValue = index > 0 ? progressPts[index - 1] : 0
animateStroke.toValue = progressPts[index]
animateStroke.duration = 2.0
animateStroke.fillMode = .forwards
animateStroke.isRemovedOnCompletion = false
circleLayer.add(animateStroke, forKey: "MyAnimation")
index+=1
}