From 46f7c46b1aedb45d53421781e87ade0e59749a90 Mon Sep 17 00:00:00 2001 From: Michael Chen Date: Tue, 5 Jun 2018 13:30:30 -0400 Subject: [PATCH] add delegate function for interactiveTransitionGetCanceled --- .../PresentationHandling/MVMCoreNavigationOperation.m | 9 +++++++-- .../MVMCorePresentationDelegateProtocol.h | 4 ++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.m b/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.m index 95f78cd..c037aa4 100644 --- a/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.m +++ b/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.m @@ -250,8 +250,7 @@ - (nullable id )navigationController:(UINavigationController *)navigationController interactionControllerForAnimationController:(id)animationController { if (self.delegate && [self.delegate respondsToSelector:@selector(navigationController:interactionControllerForAnimationController:)]) { - id interactiveTransitioning = [self.delegate navigationController:navigationController interactionControllerForAnimationController:animationController]; - return interactiveTransitioning; + return [self.delegate navigationController:navigationController interactionControllerForAnimationController:animationController]; } else { return nil; } @@ -259,12 +258,18 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqualToString:@"interactiveTransitionCanceled"]) { + [object removeObserver:self forKeyPath:@"interactiveTransitionCanceled"]; BOOL transitionCanceled = ((NSNumber*)change[NSKeyValueChangeNewKey]).boolValue; if (transitionCanceled) { //When interactive transition canceled, the destination viewController should be removed from navigationController [self.navigationObject.viewController removeFromParentViewController]; [self markAsFinished]; + if (self.delegate && [self.delegate respondsToSelector:@selector(navigationController:interactiveTransitionGetCanceled:)]) { + [self.delegate navigationController:self.navigationObject.navigationController interactiveTransitionGetCanceled: true]; + } } + } else { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } } diff --git a/MVMCore/MVMCore/PresentationHandling/MVMCorePresentationDelegateProtocol.h b/MVMCore/MVMCore/PresentationHandling/MVMCorePresentationDelegateProtocol.h index b4c29c4..c57afab 100644 --- a/MVMCore/MVMCore/PresentationHandling/MVMCorePresentationDelegateProtocol.h +++ b/MVMCore/MVMCore/PresentationHandling/MVMCorePresentationDelegateProtocol.h @@ -19,6 +19,10 @@ // Called when a view controller has been displayed on a navigation controller - (void)navigationController:(nonnull UINavigationController *)navigationController displayedViewController:(nonnull UIViewController *)viewController; +// Called when interactive transition get canceled +- (void)navigationController:(nonnull UINavigationController *)navigationController interactiveTransitionGetCanceled:(BOOL)canceled; + + - (nullable id )navigationController:(nonnull UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(nonnull UIViewController *)fromVC