SwiftUI-遷移をアニメーション化する

squarehippo10

モーダルシートにサインアウトボタンがあり、ユーザーをログイン画面に戻すことができます。これを実現するために、最初にシートを閉じてから、asyncAfter(deadline :)を使用して、ログインページを表示する環境変数を設定します。すべて正常に機能しますが、シートが閉じられると、シートの下のビューからログインページへの移行はかなり不快になります。主に1つがないためです。上面図が消え、ログインビューが表示されます。カスタムトランジションを作成できることはわかっていますが、どこにアタッチするかがわかりません。たとえば、シートの下のビューをフェードアウトしたいとします。(ただし、私はあらゆる種類の移行を受け入れています!)

これは、トラフィックを誘導する構造体です。

struct ConductorView: View {
   @EnvironmentObject var tower: Tower
   let onboardingCompleted = UserDefaults.standard.bool(forKey: "FirstVisit")
    
   var body: some View {
      VStack {
         if tower.currentPage == .onboarding {
            Onboarding1View()
         } else if tower.currentPage == .login {
            LoginView()
         } else if tower.currentPage == .idle {
            LoginView()
         }
      }.onAppear{
         if self.onboardingCompleted {
            self.tower.currentPage = .login
         } else {
            self.tower.currentPage = .onboarding
         }
      }
   }
}

そして、これはシートのサインアウトボタンです。

Button(action: {
   self.presentationMode.wrappedValue.dismiss()
   DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
      self.tower.currentPage = .login
   }
}) {
   Text("Sign Out")
}
彼の気性

これは、複製されたコードの簡略化されたデモです(そして、モードを表示するために、少し長い遅延を作成しました)。もちろん、トランジションやアニメーションのタイプを変更するなどして、ニーズに合わせて調整する必要があります。Xcode12/ iOS14でテスト済み

デモ

class Tower: ObservableObject {
    enum PageType {
        case onboarding, login, idle
    }
    @Published var currentPage: PageType = .onboarding
}

struct ConductorView: View {
   @EnvironmentObject var tower: Tower
   let onboardingCompleted = false

   var body: some View {
      VStack {
         if tower.currentPage == .onboarding {
            Onboarding1View()
         } else if tower.currentPage == .login {
            Text("LoginView")
                .transition(.move(edge: .trailing))    // << here !!
         } else if tower.currentPage == .idle {
            Text("IdleView")
         }
      }
      .animation(.default, value: tower.currentPage)   // << here !!
      .onAppear{
         if self.onboardingCompleted {
            self.tower.currentPage = .login
         } else {
            self.tower.currentPage = .onboarding
         }
      }
   }
}


struct Onboarding1View: View {
   @EnvironmentObject var tower: Tower
    @Environment(\.presentationMode) var presentationMode
    @State private var isPresented = true
    var body: some View {
        Text("Login")
            .sheet(isPresented: $isPresented) {
                Button(action: {
                   self.presentationMode.wrappedValue.dismiss()
                   DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                      self.tower.currentPage = .login
                   }
                }) {
                   Text("Sign Out")
                }
            }
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SwiftUI-遷移をアニメーション化する

分類Dev

SwiftUIでビュー間の遷移をアニメーション化する方法は?

分類Dev

SwiftUIでビュー間の遷移をアニメーション化する方法は?

分類Dev

SwiftUIでテキスト値の変更をアニメーション化/遷移する方法

分類Dev

SwiftUIでテキスト値の変更をアニメーション化/遷移する方法

分類Dev

SwiftUIの階層にビューを追加するときに遷移をアニメーション化する方法

分類Dev

あるグラデーションから別のSwiftUIへのアニメーション遷移

分類Dev

SwiftUIでパスをアニメーション化する方法

分類Dev

SwiftUIでnavigationBarHiddenをアニメーション化する方法は?

分類Dev

SwiftUIで遷移アニメーションが機能しない

分類Dev

SwiftUIアニメーション:次に表示を移動する方法は?

分類Dev

ZStack内に表示されるSwiftUIアニメーションビューの奇妙な遷移

分類Dev

SwiftUIで状態の変化をアニメーション化する

分類Dev

SwiftUI | このパスシェイプをアニメーション化する

分類Dev

SwiftUIでTの非表示と表示をアニメーション化する

分類Dev

SwiftUI、背景色を複数回アニメーション化する方法

分類Dev

SwiftUIリストでアイテムを移動するときの不要なアニメーション

分類Dev

SwiftUIリストでアイテムを移動するときの不要なアニメーション

分類Dev

SwiftUI:コンテンツの変更をアニメーション化せずにリストの変更をアニメーション化する

分類Dev

Lottieアニメーションを再生するSwiftUI

分類Dev

SwiftUIで回転アニメーションを停止する

分類Dev

SwiftUI-異なる曲線で複数のパラメーターをアニメーション化する

分類Dev

SwiftUI-ボタンを押すとビューをアニメーション化する

分類Dev

SwiftUI:画像をアニメーション化できません

分類Dev

swiftuiでスクロールするときにヘッダーをアニメーション化する

分類Dev

SwiftUI-パスシェイプのストローク描画をアニメーション化する

分類Dev

アプリが開いたときに単語の文字をアニメーション化する-SwiftUI

分類Dev

SwiftUIとCoreData(@FetchRequest)を使用して動的リストソートをアニメーション化する方法

分類Dev

SwiftUI(ベータ6)-ビューの並べ替えをアニメーション化する

Related 関連記事

  1. 1

    SwiftUI-遷移をアニメーション化する

  2. 2

    SwiftUIでビュー間の遷移をアニメーション化する方法は?

  3. 3

    SwiftUIでビュー間の遷移をアニメーション化する方法は?

  4. 4

    SwiftUIでテキスト値の変更をアニメーション化/遷移する方法

  5. 5

    SwiftUIでテキスト値の変更をアニメーション化/遷移する方法

  6. 6

    SwiftUIの階層にビューを追加するときに遷移をアニメーション化する方法

  7. 7

    あるグラデーションから別のSwiftUIへのアニメーション遷移

  8. 8

    SwiftUIでパスをアニメーション化する方法

  9. 9

    SwiftUIでnavigationBarHiddenをアニメーション化する方法は?

  10. 10

    SwiftUIで遷移アニメーションが機能しない

  11. 11

    SwiftUIアニメーション:次に表示を移動する方法は?

  12. 12

    ZStack内に表示されるSwiftUIアニメーションビューの奇妙な遷移

  13. 13

    SwiftUIで状態の変化をアニメーション化する

  14. 14

    SwiftUI | このパスシェイプをアニメーション化する

  15. 15

    SwiftUIでTの非表示と表示をアニメーション化する

  16. 16

    SwiftUI、背景色を複数回アニメーション化する方法

  17. 17

    SwiftUIリストでアイテムを移動するときの不要なアニメーション

  18. 18

    SwiftUIリストでアイテムを移動するときの不要なアニメーション

  19. 19

    SwiftUI:コンテンツの変更をアニメーション化せずにリストの変更をアニメーション化する

  20. 20

    Lottieアニメーションを再生するSwiftUI

  21. 21

    SwiftUIで回転アニメーションを停止する

  22. 22

    SwiftUI-異なる曲線で複数のパラメーターをアニメーション化する

  23. 23

    SwiftUI-ボタンを押すとビューをアニメーション化する

  24. 24

    SwiftUI:画像をアニメーション化できません

  25. 25

    swiftuiでスクロールするときにヘッダーをアニメーション化する

  26. 26

    SwiftUI-パスシェイプのストローク描画をアニメーション化する

  27. 27

    アプリが開いたときに単語の文字をアニメーション化する-SwiftUI

  28. 28

    SwiftUIとCoreData(@FetchRequest)を使用して動的リストソートをアニメーション化する方法

  29. 29

    SwiftUI(ベータ6)-ビューの並べ替えをアニメーション化する

ホットタグ

アーカイブ