diff --git a/apps/src/tests/TestAnimation.tsx b/apps/src/tests/TestAnimation.tsx
index e4058c5df..21595ae3c 100644
--- a/apps/src/tests/TestAnimation.tsx
+++ b/apps/src/tests/TestAnimation.tsx
@@ -77,13 +77,18 @@ function Fifth({ navigation }: RoutePropBase<'Fifth'>): React.ReactNode {
);
}
+function HeaderRight() {
+ return (
+
+ );
+}
+
export default function App() {
return (
diff --git a/ios/RNSScreenStackAnimator.mm b/ios/RNSScreenStackAnimator.mm
index 65a99f284..89caf8d00 100644
--- a/ios/RNSScreenStackAnimator.mm
+++ b/ios/RNSScreenStackAnimator.mm
@@ -59,7 +59,7 @@ - (NSTimeInterval)transitionDuration:(id)t
}
if (screen != nil && screen.stackAnimation == RNSScreenStackAnimationNone) {
- return 0;
+ return 0.0;
}
if (screen != nil && screen.transitionDuration != nil && [screen.transitionDuration floatValue] >= 0) {
@@ -70,12 +70,6 @@ - (NSTimeInterval)transitionDuration:(id)t
return _transitionDuration;
}
-//- (id)interruptibleAnimatorForTransition:
-// (id)transitionContext
-//{
-// return _inFlightAnimator;
-//}
-
- (void)animateTransition:(id)transitionContext
{
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
@@ -489,6 +483,38 @@ - (void)animateWithNoAnimation:(id)transit
}
}
+- (void)animateNoneWithTransitionContext:(id)transitionContext
+ toVC:(UIViewController *)toViewController
+ fromVC:(UIViewController *)fromViewController
+{
+ toViewController.view.frame = [transitionContext finalFrameForViewController:toViewController];
+
+ if (_operation == UINavigationControllerOperationPush) {
+ [[transitionContext containerView] addSubview:toViewController.view];
+ toViewController.view.alpha = 0.0;
+ [UIView animateWithDuration:[self transitionDuration:transitionContext]
+ animations:^{
+ toViewController.view.alpha = 1.0;
+ }
+ completion:^(BOOL finished) {
+ toViewController.view.alpha = 1.0;
+ [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
+ }];
+ } else if (_operation == UINavigationControllerOperationPop) {
+ [[transitionContext containerView] insertSubview:toViewController.view belowSubview:fromViewController.view];
+
+ [UIView animateWithDuration:[self transitionDuration:transitionContext]
+ animations:^{
+ fromViewController.view.alpha = 0.0;
+ }
+ completion:^(BOOL finished) {
+ fromViewController.view.alpha = 1.0;
+
+ [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
+ }];
+ }
+}
+
#pragma mark - Public API
- (nullable id)timingParamsForAnimationCompletion
@@ -509,24 +535,35 @@ - (void)animateTransitionWithStackAnimation:(RNSScreenStackAnimation)animation
toVC:(UIViewController *)toVC
fromVC:(UIViewController *)fromVC
{
- if (animation == RNSScreenStackAnimationSimplePush) {
- [self animateSimplePushWithShadowEnabled:shadowEnabled transitionContext:transitionContext toVC:toVC fromVC:fromVC];
- return;
- } else if (animation == RNSScreenStackAnimationSlideFromLeft) {
- [self animateSlideFromLeftWithTransitionContext:transitionContext toVC:toVC fromVC:fromVC];
- return;
- } else if (animation == RNSScreenStackAnimationFade || animation == RNSScreenStackAnimationNone) {
- [self animateFadeWithTransitionContext:transitionContext toVC:toVC fromVC:fromVC];
- return;
- } else if (animation == RNSScreenStackAnimationSlideFromBottom) {
- [self animateSlideFromBottomWithTransitionContext:transitionContext toVC:toVC fromVC:fromVC];
- return;
- } else if (animation == RNSScreenStackAnimationFadeFromBottom) {
- [self animateFadeFromBottomWithTransitionContext:transitionContext toVC:toVC fromVC:fromVC];
- return;
+ switch (animation) {
+ case RNSScreenStackAnimationSimplePush:
+ [self animateSimplePushWithShadowEnabled:shadowEnabled
+ transitionContext:transitionContext
+ toVC:toVC
+ fromVC:fromVC];
+ return;
+ case RNSScreenStackAnimationSlideFromLeft:
+ [self animateSlideFromLeftWithTransitionContext:transitionContext toVC:toVC fromVC:fromVC];
+ return;
+ case RNSScreenStackAnimationFade:
+ [self animateFadeWithTransitionContext:transitionContext toVC:toVC fromVC:fromVC];
+ return;
+ case RNSScreenStackAnimationSlideFromBottom:
+ [self animateSlideFromBottomWithTransitionContext:transitionContext toVC:toVC fromVC:fromVC];
+ return;
+ case RNSScreenStackAnimationFadeFromBottom:
+ [self animateFadeFromBottomWithTransitionContext:transitionContext toVC:toVC fromVC:fromVC];
+ return;
+ case RNSScreenStackAnimationNone:
+ [self animateNoneWithTransitionContext:transitionContext toVC:toVC fromVC:fromVC];
+ return;
+ default:
+ // simple_push is the default custom animation
+ [self animateSimplePushWithShadowEnabled:shadowEnabled
+ transitionContext:transitionContext
+ toVC:toVC
+ fromVC:fromVC];
}
- // simple_push is the default custom animation
- [self animateSimplePushWithShadowEnabled:shadowEnabled transitionContext:transitionContext toVC:toVC fromVC:fromVC];
}
+ (UISpringTimingParameters *)defaultSpringTimingParametersApprox