The state of an animator is being updated after calling its completion block, resulting in being incorrect in said completion block.
This is major issue when you want to share a completion block with multiple animators with different settling times, and execute some logic after all animators have completed.
For example:
let firstAnimator = SpringAnimator<CGFloat>(...)
let secondAnimator = SpringAnimator<CGRect>(...)
let sharedCompletion = {
guard case .ended = firstAnimator.state, case .ended = secondAnimator.state // Will never be satisfied
else { return }
print("Both animations are finished.")
}
firstAnimator.completion = { completion in
guard case .finished = completion else { return }
// (firstAnimator.state == .ended) β false π
sharedCompletion()
}
secondAnimator.completion = { completion in
guard case .finished = completion else { return }
// (secondAnimator.state == .ended) β false π
sharedCompletion()
}
I understand that you don't accept contributions yet so I haven't opened a pull request, but if you change your mind, I don't mind opening one!
I forked the project and fixed the issue in the meantime.
Thanks again for this delightful animation engine, I love it!
Hi π
The state of an animator is being updated after calling its completion block, resulting in being incorrect in said completion block. This is major issue when you want to share a completion block with multiple animators with different settling times, and execute some logic after all animators have completed.
For example:
I understand that you don't accept contributions yet so I haven't opened a pull request, but if you change your mind, I don't mind opening one! I forked the project and fixed the issue in the meantime.
Thanks again for this delightful animation engine, I love it!