jtrivedi/Wave

Unexpected animator state in completion block

juliensagot opened this issue ยท 0 comments

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:

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!