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 { - (nullable id <UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController *)navigationController interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransitioning>)animationController {
if (self.delegate && [self.delegate respondsToSelector:@selector(navigationController:interactionControllerForAnimationController:)]) { if (self.delegate && [self.delegate respondsToSelector:@selector(navigationController:interactionControllerForAnimationController:)]) {
id interactiveTransitioning = [self.delegate navigationController:navigationController interactionControllerForAnimationController:animationController]; return [self.delegate navigationController:navigationController interactionControllerForAnimationController:animationController];
return interactiveTransitioning;
} else { } else {
return nil; return nil;
} }
@ -259,12 +258,18 @@
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context { - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
if ([keyPath isEqualToString:@"interactiveTransitionCanceled"]) { if ([keyPath isEqualToString:@"interactiveTransitionCanceled"]) {
[object removeObserver:self forKeyPath:@"interactiveTransitionCanceled"];
BOOL transitionCanceled = ((NSNumber*)change[NSKeyValueChangeNewKey]).boolValue; BOOL transitionCanceled = ((NSNumber*)change[NSKeyValueChangeNewKey]).boolValue;
if (transitionCanceled) { if (transitionCanceled) {
//When interactive transition canceled, the destination viewController should be removed from navigationController //When interactive transition canceled, the destination viewController should be removed from navigationController
[self.navigationObject.viewController removeFromParentViewController]; [self.navigationObject.viewController removeFromParentViewController];
[self markAsFinished]; [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 // Called when a view controller has been displayed on a navigation controller
- (void)navigationController:(nonnull UINavigationController *)navigationController displayedViewController:(nonnull UIViewController *)viewController; - (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 - (nullable id <UIViewControllerAnimatedTransitioning>)navigationController:(nonnull UINavigationController *)navigationController
animationControllerForOperation:(UINavigationControllerOperation)operation animationControllerForOperation:(UINavigationControllerOperation)operation
fromViewController:(nonnull UIViewController *)fromVC fromViewController:(nonnull UIViewController *)fromVC