I know this is a rather old question so the answer might not be of use to the OP but maybe to some one else. I faced the same problem yesterday and did a lot of searching on SO an the rest of the web without really finding anything.
So here is the solution I used for a similar problem. This is implemented in the navigationcontroller delegate but i guess you can do it some other place if that fits your need better.
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
id<UIViewControllerTransitionCoordinator> tc = navigationController.topViewController.transitionCoordinator;
[tc notifyWhenInteractionEndsUsingBlock:^(id<UIViewControllerTransitionCoordinatorContext> context) {
NSLog(@"DONE!!!");
NSLog(@"Container View: %@", [context containerView]);
NSLog(@"From VC: %@", [context viewControllerForKey:UITransitionContextFromViewControllerKey]);
NSLog(@"To VC: %@", [context viewControllerForKey:UITransitionContextToViewControllerKey]);
NSLog(@"Initially Interactive: %i", [context initiallyInteractive]);
NSLog(@"Completion Curve: %d", [context completionCurve]);
NSLog(@"Is Animated: %i", [context isAnimated]);
NSLog(@"Is Cancelled: %i", [context isCancelled]);
NSLog(@"Is Interactive: %i", [context isInteractive]);
NSLog(@"Percent Complete: %f", [context percentComplete]);
NSLog(@"Presentation Style: %d", [context presentationStyle]);
NSLog(@"Transition Duration: %f", [context transitionDuration]);
}];
}
This will fire when user lift her finger and the animation is rather reversed or completed. The [context isCancelled];
will tell you if it reversed or completer. And there is also a lot of other nice info in the context object that can be to use.