Самый простой способ - это анимировать путь CAShapeLayer.Это дает вам закругленные концы и митрэд присоединяются бесплатно.Вам нужен прямой путь и согнутый путь;переключаться с одного на другой.Прямой путь должен состоять из двух сегментов, чтобы соответствовать двум сегментам изогнутого пути.
Вот мой симулятор вашей анимации:
Вот конфигурация слоя формы и его путей:
let shape = CAShapeLayer()
shape.frame = // ...
shape.lineCap = .round
shape.lineJoin = .miter
shape.lineWidth = 6
shape.strokeColor = UIColor.gray.cgColor
shape.fillColor = UIColor.clear.cgColor
let p1 = UIBezierPath()
p1.move(to: CGPoint(x:0, y:35))
p1.addLine(to: CGPoint(x:20, y:35))
p1.addLine(to: CGPoint(x:40, y:35))
let straight = p1.cgPath
let p2 = UIBezierPath()
p2.move(to: CGPoint(x:0, y:25))
p2.addLine(to: CGPoint(x:20, y:30))
p2.addLine(to: CGPoint(x:40, y:25))
let bent = p2.cgPath
Тогда нужно просто поменять path
из shape
между straight
и bent
по желанию.