Umm... the basic problem with the swipe is that it's an interactive gesture. As is probably obvious, until the user completes the gesture you don't know that he's actually completed the gesture, so you can't clear the state until after he's done.
(And they're probably pushing an update event on the runloop to handle that.)
Further, as long as you go past halfway with a swipe you can release and wait for the animation to complete... which gives you more than enough time to go backwards.
Fun.