BasicAnimation, Swift - PullRequest
       31

BasicAnimation, Swift

0 голосов
/ 28 марта 2020

Я определил круг следующим образом:

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)? Я не могу понять ...

1 Ответ

0 голосов
/ 29 марта 2020

Существует проблема с путем Безье, к которому вы добавляете дополнительную четверть к кругу,

Таким образом, круг заполняется при ( 60/5) * 4 = 48 секунд и остальные 12 секунд - это превышение в уже заполненном квартале.

Установка начального угла на 0 устранит проблему.

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