swift - 如何在 Swift 中重置圆形进度条?
问题描述
我在 Swift 中创建了一个圆形进度条。我可以开始、暂停和恢复动画,但我需要能够通过点击按钮来重置动画。
这是我用来启动、暂停和恢复动画的代码。重置它需要哪些额外步骤?
func startAnimation() {
let basicAnimation = CABasicAnimation(keyPath: "strokeEnd")
basicAnimation.toValue = 1
basicAnimation.duration = seconds
basicAnimation.fillMode = CAMediaTimingFillMode.forwards
basicAnimation.isRemovedOnCompletion = false
shapeLayer.add(basicAnimation, forKey: "basicAnime")
}
func pauseLayer(layer: CALayer){
let pausedTime : CFTimeInterval = layer.convertTime(CACurrentMediaTime(), from: nil)
layer.speed = 0.0
layer.timeOffset = pausedTime
}
func resumeAnimation(layer: CALayer){
let pausedTime = layer.timeOffset
layer.speed = 1.0
layer.timeOffset = 0.0
layer.beginTime = 0.0
let timeSincePause = layer.convertTime(CACurrentMediaTime(), from: nil) - pausedTime
layer.beginTime = timeSincePause
}
func resetAnimation() {
timer.invalidate()
// next steps
}
解决方案
一种可能的解决方案是简单地删除以前添加的动画
查看CALayer#removeAllAnimations()
和CALayer#removeAnimation(forKey:)
了解更多详情
推荐阅读
- android - 从 Play 商店获取拒绝消息“您的应用容易受到 Intent 重定向”
- angular - matDatepickerFilter 打破 mat-datepicker
- java - how to call a method with multiple threads
- php - 在 Drupal 8 的文本字段中集成选择下拉菜单
- debugging - 如何使用汇编语言打印“Hello World”
- c++ - 如何将我创建的自定义容器放入库中,以便可以像任何其他容器一样初始化它(例如 std::vector )?
- node.js - nodemailer 部署到天蓝色时的不稳定行为
- python - 我一次又一次地收到这个错误(TypeError:不能将序列乘以非“列表”类型的整数)
- jenkins - 使用詹金斯在运行时调用变量时出错
- python - 我怎样才能“标记”一台计算机,以便以后在 Python 上识别它?