質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%

Q&A

解決済

1回答

2866閲覧

SwiftUIでアニメーションなしの遷移を行いたい

hodoru3sei

総合スコア284

0グッド

0クリップ

投稿2021/09/21 11:54

SwiftUIでUIKitのpresent遷移をアニメーションなしで行いたいと考えているのですがどうすれば良いのかわからず困っています。

以下のコードで遷移自体はできているんですが、fullScreenCoverにくっつけているanimationのnoneが効かずアニメーションが走ってしまっている状況です。

Swift

1struct ContentView: View { 2 @State var isPresented0: Bool = false 3 4 var body: some View { 5 Button("present 0") { 6 self.isPresented0.toggle() 7 } 8 .fullScreenCover(isPresented: $isPresented0){ 9 PresentView() 10 }.animation(.none) 11 } 12} 13 14struct PresentView: View { 15 var body: some View { 16 Text("Present Success") 17 } 18 19}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

調べた限り、SwiftUI はまだカスタマイズしたトランジション(画面遷移時のアニメーション方法)を適用できないようです。

よく見られる妥協案としては、フラグとなる Bool 値で配置するビューそのものを切り替えてしまうものですね。

swift

1import SwiftUI 2 3struct ContentView: View { 4 @State var modalViewIsPresenting: Bool = false 5 var body: some View { 6 // 生成・配置するビューそのものを置き換えてしまう 7 if self.modalViewIsPresenting { 8 ModalView(isPresented: self.$modalViewIsPresenting) 9 } else { 10 InitialView(modalViewIsPresenting: self.$modalViewIsPresenting) 11 } 12 } 13} 14 15// 通常時に表示したいビュー 16struct InitialView: View { 17 @Binding var modalViewIsPresenting: Bool 18 var body: some View { 19 ZStack { 20 Color.green // 確認用の背景色 21 22 Button("Present ModalView") { 23 self.modalViewIsPresenting.toggle() 24 } 25 } 26 } 27} 28 29// モーダルで表示したいビュー 30struct ModalView: View { 31 @Binding var isPresented: Bool 32 var body: some View { 33 ZStack { 34 Color.red // 確認用の背景色 35 36 Button("Hide") { 37 self.isPresented.toggle() 38 } 39 } 40 } 41}

備考:

表示切り替えのたびに生成・破棄されていると思うので InitialViewModalView の内容をその中だけで変更しても表示を切り替えればおそらく生成時の初期状態に戻る点には注意してくださいね。

変更を残しておきたい値は母艦になる ContentView にプロパティを作り各ビューにバインドするなどしてうまくやってください。

投稿2021/09/22 09:26

編集2021/09/22 09:45
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問