浏览代码

Transition behaviour

polscm32 1 年之前
父节点
当前提交
49e5a56199
共有 1 个文件被更改,包括 13 次插入1 次删除
  1. 13 1
      Trio/Sources/Modules/Onboarding/View/OnboardingView.swift

+ 13 - 1
Trio/Sources/Modules/Onboarding/View/OnboardingView.swift

@@ -3,9 +3,15 @@ import Swinject
 
 
 /// The main onboarding view that manages navigation between onboarding steps.
 /// The main onboarding view that manages navigation between onboarding steps.
 extension Onboarding {
 extension Onboarding {
+    private enum NavigationDirection {
+        case forward
+        case backward
+    }
+
     struct RootView: BaseView {
     struct RootView: BaseView {
         let resolver: Resolver
         let resolver: Resolver
         @State var state = StateModel()
         @State var state = StateModel()
+        @State private var navigationDirection: NavigationDirection = .forward
         let onboardingManager: OnboardingManager
         let onboardingManager: OnboardingManager
         @State private var currentStep: OnboardingStep = .welcome
         @State private var currentStep: OnboardingStep = .welcome
         @State private var currentDeliverySubstep: DeliveryLimitSubstep = .maxIOB
         @State private var currentDeliverySubstep: DeliveryLimitSubstep = .maxIOB
@@ -157,7 +163,11 @@ extension Onboarding {
                                             CompletedStepView()
                                             CompletedStepView()
                                         }
                                         }
                                     }
                                     }
-                                    .transition(.asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading)))
+                                    .transition(
+                                        navigationDirection == .forward
+                                            ? .asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading))
+                                            : .asymmetric(insertion: .move(edge: .leading), removal: .move(edge: .trailing))
+                                    )
                                     .padding(.horizontal)
                                     .padding(.horizontal)
                                     .id(currentStep.id) // Force view recreation when step changes
                                     .id(currentStep.id) // Force view recreation when step changes
                                 }
                                 }
@@ -181,6 +191,7 @@ extension Onboarding {
                             // Back button
                             // Back button
                             if currentStep != .welcome {
                             if currentStep != .welcome {
                                 Button(action: {
                                 Button(action: {
+                                    navigationDirection = .backward
                                     withAnimation {
                                     withAnimation {
                                         if currentStep == .completed {
                                         if currentStep == .completed {
                                             currentStep = .deliveryLimits
                                             currentStep = .deliveryLimits
@@ -228,6 +239,7 @@ extension Onboarding {
 
 
                             // Next/Finish button
                             // Next/Finish button
                             Button(action: {
                             Button(action: {
+                                navigationDirection = .forward
                                 withAnimation {
                                 withAnimation {
                                     if currentStep == .completed {
                                     if currentStep == .completed {
                                         state.saveOnboardingData()
                                         state.saveOnboardingData()