From 3c9ea4ee074fa90dab79e47877e2bde9b151a5ed Mon Sep 17 00:00:00 2001 From: Krzysztof Magiera Date: Fri, 3 Aug 2018 16:20:01 +0200 Subject: [PATCH] Properly cancel transitioning on ScreenStack on iOS --- ios/RNSScreenStack.m | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/ios/RNSScreenStack.m b/ios/RNSScreenStack.m index 7aa98ece..295a50f3 100644 --- a/ios/RNSScreenStack.m +++ b/ios/RNSScreenStack.m @@ -149,14 +149,7 @@ if (_transitioning == transitioning) { return; } - if (transitioning == 0) { - // finish transition - [_interactor finishInteractiveTransition]; - _interactor = nil; - } else { - [self markUpdated]; - _transitioningStateChanged = YES; - } + _transitioningStateChanged = YES; _transitioning = transitioning; } @@ -200,16 +193,24 @@ [controllers addObject:screen.controller]; } if (_transitioningStateChanged) { - [_interactor cancelInteractiveTransition]; - _interactor = [UIPercentDrivenInteractiveTransition new]; - if (_transitioning < 0) { - [_controller setViewControllers:controllers animated:NO]; - [_controller popViewControllerAnimated:YES]; + if (_transitioning == 0) { + // finish or cancel transitioning + if (_controller.viewControllers.lastObject == controllers.lastObject) { + [_interactor finishInteractiveTransition]; + } else { + [_interactor cancelInteractiveTransition]; + } } else { - UIViewController *lastController = [controllers lastObject]; - [controllers removeLastObject]; - [_controller setViewControllers:controllers animated:NO]; - [_controller pushViewController:lastController animated:YES]; + _interactor = [UIPercentDrivenInteractiveTransition new]; + if (_transitioning < 0) { + [_controller setViewControllers:controllers animated:NO]; + [_controller popViewControllerAnimated:YES]; + } else { + UIViewController *lastController = [controllers lastObject]; + [controllers removeLastObject]; + [_controller setViewControllers:controllers animated:NO]; + [_controller pushViewController:lastController animated:YES]; + } } _transitioningStateChanged = NO; } else {