【发布时间】:2019-09-12 08:24:23
【问题描述】:
我使用 SwiftUI 制作了一个自定义模式。它工作正常,但动画很不稳定。
慢动作播放时,可以看到ModalContent的背景在触发ModalOverlay的点击动作后立即消失。但是,ModalContent 的 Text 视图始终可见。
谁能告诉我如何防止ModalContent的背景过早消失?
下面的慢动作视频和代码:
import SwiftUI
struct ContentView: View {
@State private var isShowingModal = false
var body: some View {
GeometryReader { geometry in
ZStack {
Button(
action: { withAnimation { self.isShowingModal = true } },
label: { Text("Show Modal") }
)
ZStack {
if self.isShowingModal {
ModalOverlay(tapAction: { withAnimation { self.isShowingModal = false } })
ModalContent().transition(.move(edge: .bottom))
}
}.edgesIgnoringSafeArea(.all)
}
}
}
}
struct ModalOverlay: View {
var color = Color.black.opacity(0.4)
var tapAction: (() -> Void)? = nil
var body: some View {
color.onTapGesture { self.tapAction?() }
}
}
struct ModalContent: View {
var body: some View {
GeometryReader { geometry in
VStack {
Spacer()
VStack(spacing: 16) {
Text("Item 1")
Text("Item 2")
Text("Item 3")
}
.frame(width: geometry.size.width)
.padding(.top, 16)
.padding(.bottom, geometry.safeAreaInsets.bottom)
.background(Color.white)
}
}
}
}
【问题讨论】:
标签: animation modal-dialog swiftui