我创建了一个横幅修改器,可以从顶部显示横幅。这个动画效果很好。然而,当我点击以将其关闭时,它不会进行任何动画,只是隐藏起来,尽管点击手势操作已经使用withAnimation
包装了它。
struct BannerModifier: ViewModifier {
@Binding var model: BannerData?
func body(content: Content) -> some View {
content.overlay(
Group {
if model != nil {
VStack {
HStack(alignment: .firstTextBaseline) {
Image(systemName: "exclamationmark.triangle.fill")
VStack(alignment: .leading) {
Text(model?.title ?? "")
.font(.headline)
if let message = model?.message {
Text(message)
.font(.footnote)
}
}
}
.padding()
.frame(minWidth: 0, maxWidth: .infinity)
.foregroundColor(.white)
.background(.red)
.cornerRadius(10)
.shadow(radius: 10)
Spacer()
}
.padding()
.animation(.easeInOut)
.transition(AnyTransition.move(edge: .top).combined(with: .opacity))
.onTapGesture {
withAnimation {
model = nil
}
}
.gesture(
DragGesture()
.onChanged { _ in
withAnimation {
model = nil
}
}
)
}
}
)
}
}
struct BannerData: Identifiable {
let id = UUID()
let title: String
let message: String?
}
在触摸手势中,我清除了模型,但它没有动画效果。 它只是立即隐藏。 我该如何使它动画滑动,以便与显示时向下滑动相反的方式上滑? 如果我能使拖动手势交互式,就像本机通知一样,那就太好了。