When using the AnimationController, you can move forwards and backwards using the .time property. You could create a lerp function that has a from and to value, and pass a lerpTime. In my case, lerpTime is elapsedTime remapped to 0-1. Which would originally be 0 to animation duration if I wanted to play forwards or animation duration to 0 if I wanted to play backwards.
Example:
let currentValue = lerp(a: from, b: to, t: lerpTime)
animationController.time = TimeInterval(currentValue)