Можно ли добавить собственную анимацию в fullScreenCover
? Анимация по умолчанию отключена, но я пытаюсь найти способ добавить собственную анимацию.
Я предполагаю, что transaction.disablesAnimations = true
отключает любую добавленную анимацию, но я не нашел другого способа отключить анимацию по умолчанию.
Я знаю, что существуют альтернативные способы реализации чего-то подобного (откат к UIKit или использование наложения), но было бы интересно, если бы это можно было сделать с помощью fullScreenCover
.
struct ContentView: View {
@State private var isPresentingFullScreenCover = false
var body: some View {
Button("Show FullScreenCover") {
isPresentingFullScreenCover = true
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(.black)
.fullScreenCover(isPresented: $isPresentingFullScreenCover) {
FullScreenCoverView()
}
.transaction { transaction in
transaction.disablesAnimations = true
}
}
}
struct FullScreenCoverView: View {
@Environment(\.dismiss) var dismiss
var body: some View {
Button("Dismiss") {
dismiss()
}
}
}
Да, наверняка есть альтернативы этому решению, но было бы интересно узнать, можно ли это решить с помощью FullScreenCover.
Я почти уверен, что ты не сможешь.
Вы успешно отключили обычный переход. Итак, все, что вам нужно сделать сейчас, это:
Добавляемую вами анимацию можно запустить, переключив флаг в .onAppear
и .onDisappear
:
struct FullScreenCoverView: View {
@Environment(\.dismiss) var dismiss
@State private var isShowing = false
var body: some View {
ZStack {
Color.clear
if isShowing {
Button("Dismiss") {
withAnimation {
isShowing = false
} completion: {
dismiss()
}
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(.background)
.transition(.scale.animation(.easeInOut))
}
}
.ignoresSafeArea()
.presentationBackground(.clear)
.onAppear { isShowing = true }
.onDisappear { isShowing = false }
}
}
Вы можете поместить два вида в
ZStack
и применить собственный переход к виду сверху. Кроме этого, я не думаю, что это можно сделать в чистом SwiftUI.