【问题标题】:BasicAnimation, Swift基础动画,斯威夫特
【发布时间】:2020-03-28 19:45:58
【问题描述】:

我这样定义了一个圆圈:

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)吗?看不懂……

【问题讨论】:

    标签: ios swift xcode geometry cabasicanimation


    【解决方案1】:

    您在圆中添加额外四分之一的贝塞尔路径存在问题,

    所以 Circle 在 (60 / 5) * 4 = 48 秒处被填充,另外 12 秒在已经填充的四分之一上透支。

    将起始角度设置为 0 即可解决此问题。

    let ring = UIBezierPath(arcCenter: center, radius: 100, startAngle: CGFloat(0) , endAngle: 2 * CGFloat.pi , clockwise: true)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 2017-07-22
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 2017-11-13
      相关资源
      最近更新 更多