add delegate function for interactiveTransitionGetCanceled

This commit is contained in:
Michael Chen 2018-06-05 13:30:30 -04:00
parent d3b078e984
commit 46f7c46b1a
2 changed files with 11 additions and 2 deletions

View File

@ -250,8 +250,7 @@
- (nullable id <UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController *)navigationController interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransitioning>)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<NSKeyValueChangeKey,id> *)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];
}
}

View File

@ -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 <UIViewControllerAnimatedTransitioning>)navigationController:(nonnull UINavigationController *)navigationController
animationControllerForOperation:(UINavigationControllerOperation)operation
fromViewController:(nonnull UIViewController *)fromVC