基本动画,Swift
BasicAnimation, Swift
我这样定义了一个圆:
let progressLayer = CAShapeLayer()
let ring = UIBezierPath(arcCenter: center, radius: 100, startAngle: -CGFloat.pi / 2 , endAngle: 2 * CGFloat.pi , clockwise: true)
progressLayer.path = ring.cgPath
progressLayer.strokeColor = UIColor.green.cgColor
progressLayer.fillColor = UIColor.clear.cgColor
view.layer.addSublayer(progressLayer)
然后我定义了一个动画,用这样的颜色和持续时间填充我的圆圈的边界:
let basicAnimation = CABasicAnimation(keyPath: "strokeEnd")
basicAnimation.toValue = 1
basicAnimation.duration = 60 //Seconds !
basicAnimation.fillMode = .forwards
progressLayer.add(basicAnimation, forKey: "blablabla")
发生的事情是动画延迟了 12 秒到达圆圈的尽头! (圆圈已填满但还剩 12 秒)
为什么会这样?是不是三角函数问题(startAngle endAngle)?看不懂...
您在圆中额外添加四分之一的贝塞尔曲线路径存在问题,
所以 Circle 在 (60 / 5) * 4 = 48 秒 时被填充,另外 12 秒在已经填充的 quarter 上透支。
将开始角度设置为 0 将解决此问题。
let ring = UIBezierPath(arcCenter: center, radius: 100, startAngle: CGFloat(0) , endAngle: 2 * CGFloat.pi , clockwise: true)
我这样定义了一个圆:
let progressLayer = CAShapeLayer()
let ring = UIBezierPath(arcCenter: center, radius: 100, startAngle: -CGFloat.pi / 2 , endAngle: 2 * CGFloat.pi , clockwise: true)
progressLayer.path = ring.cgPath
progressLayer.strokeColor = UIColor.green.cgColor
progressLayer.fillColor = UIColor.clear.cgColor
view.layer.addSublayer(progressLayer)
然后我定义了一个动画,用这样的颜色和持续时间填充我的圆圈的边界:
let basicAnimation = CABasicAnimation(keyPath: "strokeEnd")
basicAnimation.toValue = 1
basicAnimation.duration = 60 //Seconds !
basicAnimation.fillMode = .forwards
progressLayer.add(basicAnimation, forKey: "blablabla")
发生的事情是动画延迟了 12 秒到达圆圈的尽头! (圆圈已填满但还剩 12 秒) 为什么会这样?是不是三角函数问题(startAngle endAngle)?看不懂...
您在圆中额外添加四分之一的贝塞尔曲线路径存在问题,
所以 Circle 在 (60 / 5) * 4 = 48 秒 时被填充,另外 12 秒在已经填充的 quarter 上透支。
将开始角度设置为 0 将解决此问题。
let ring = UIBezierPath(arcCenter: center, radius: 100, startAngle: CGFloat(0) , endAngle: 2 * CGFloat.pi , clockwise: true)